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

最大子段和问题

相关推荐
Yeh2020587 分钟前
Mybatis笔记一
java·笔记·mybatis
likerhood7 分钟前
Java 动态代理深度解析:从“为什么“到“底层原理“
java
_阿伟_11 分钟前
信息检索简单介绍
java
下次再写13 分钟前
深入浅出微服务架构:从理论到Spring Boot实战
java·微服务·springboot·springcloud·架构设计·后端开发·分布式系统
此生决int14 分钟前
快速复习之数据结构篇——二叉树(三)
数据结构
djarmy15 分钟前
C 标准库 `<stdio.h>` 完整函数清单(官方标准 + 常用全部函数)
c语言·c++·算法
七牛云行业应用21 分钟前
NotebookLM 手机版上线了,这份完整指南帮你把它用起来
算法
进阶的猿猴24 分钟前
Rsa简单实现接口到期限制(springBoot)
java·spring boot·后端
城事漫游Molly24 分钟前
定量研究设计清单:问卷、实验与变量操作化怎么做?
大数据·人工智能·算法·ai写作·论文笔记
Epiphany.55627 分钟前
带依赖关系的最短路问题
算法