题解【最大子段和】
2026-07-10 14:23:53
发布于:天津
14阅读
0回复
0点赞
使用DP算法
本文设数组下标从1开始。
dp[1]=a[1] 因为一个数,选他就最大
接下来:
dp[i]:
- dp[i-1]+a[i]<0:dp[i]=0 a[1~i-1]的最大子段和加上a[i]小于零,那么就白手起家(bushi)
- 否则,dp[i]=dp[i-1]+a[i] 继续累加
- 统计dp表最大值,就是最大子段和
不用管为什么,模板背下来。
参考代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin>>n;
int a[200001],dp[200001],ans=0;
for(int i=1;i<=n;i++) cin>>a[i];
dp[1]=a[1];
for(int i=2;i<=n;i++){
//自己写;
}
cout<<ans;
return 0;
}
全部评论 1
可以用victor
4天前 来自 上海
1可以。但是没学过不习惯用
3天前 来自 天津
1






有帮助,赞一个