简单的dp
2024-07-17 20:10:55
发布于:上海
101阅读
0回复
0点赞
首先设状态:设 为 结尾的最大子段和。转移要么就是在 后面继续加 ,要么就是 本身。所以取最大值即可。方程:(先前讨论的变形)。
然后把状态数组滚动掉(雾)。
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int a[200005];
int main(){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",a+i);
int ans=-2000000000,t=0;;
for(int i=1;i<=n;i++){
t+=a[i];
ans=max(ans,t);
t=max(t,0);
}
printf("%d",ans);
return 0;
}
这里空空如也
有帮助,赞一个