翻转后1的数量(dp)

java 复制代码
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String s = sc.next();
        
        int cnt1 = 0;  // 原本1的个数
        int[] gain = new int[n + 1];
        
        // 构造gain数组
        for (int i = 1; i <= n; i++) {
            if (s.charAt(i - 1) == '1') {
                cnt1++;
                gain[i] = -1;  // 翻转会减少一个1
            } else {
                gain[i] = 1;   // 翻转会增加一个1
            }
        }
        
        // DP数组
        int[] dp = new int[n + 1];
        dp[1] = gain[1];
        int maxGain = dp[1];
        
        // 动态规划求最大子段和
        for (int i = 2; i <= n; i++) {
            dp[i] = Math.max(gain[i], dp[i - 1] + gain[i]);
            maxGain = Math.max(maxGain, dp[i]);
        }
        
        System.out.println(cnt1 + maxGain);
    }
}

最大子段和问题

相关推荐
会编程的土豆3 小时前
【复习】二分查找
数据结构·c++·算法
小Y._3 小时前
AQS同步器核心原理深度剖析
java·源码分析·juc·aqs
南棱笑笑生3 小时前
20260420给万象奥科的开发板HD-RK3576-PI适配瑞芯微原厂的Buildroot时使用ll命令
java·大数据·elasticsearch·rockchip
StockTV3 小时前
韩国市场API技术对接指南,涵盖实时行情、历史数据、指数信息、公司详情等功能
java·开发语言·python·php
Yzzz-F3 小时前
Problem - D - Codeforces
算法
chas_883 小时前
macbook air M5 32G本地跑ddtree-mlx效果
算法
programhelp_3 小时前
WeRide OA 2026 高频真题分享 & 详细备战指南
经验分享·算法·面试·职场和发展
疯狂打码的少年3 小时前
单向循环链表 + 尾指针:让插入删除更高效的秘密武器
数据结构·python·链表
缪懿4 小时前
javaEE:文件IO
java·java-ee
小Y._4 小时前
ConcurrentHashMap高效并发机制深度解析
java·并发·juc·concurrenthashmap