翻转后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);
    }
}

最大子段和问题

相关推荐
墨白曦煜13 分钟前
算法实战笔记:剥开回溯算法的外衣——从通用模板到高阶去重(八)
笔记·算法
z2005093025 分钟前
今日算法(回溯子集)(模版题)
数据结构·算法·leetcode
吴佳浩28 分钟前
Vibe Coding 时代,研发经理为何越来越值钱?
算法·架构
学代码的真由酱29 分钟前
WebSocket背景知识及简单实现-Java
java·websocket
IronMurphy31 分钟前
【算法五十四】72. 编辑距离
算法
QiLinkOS35 分钟前
【用呼吸重构创造价值关系——QiLink生态】
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
lld95102737 分钟前
(一)云回测:量化策略上线前的必经之路
java·服务器·数据库
云云只是个程序马喽44 分钟前
海外短剧系统开发_云微传媒:多语言短剧平台定制与变现解决方案
java·php
妄想出头的工业炼药师44 分钟前
暗光长走廊特殊场景视觉解决方案
算法·开源
weixin_468466851 小时前
图像处理特征提取新手实战指南
图像处理·人工智能·算法·ai·机器视觉·特征提取