先看代码:
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int a[200010];
int ans=-99999999;
int f[200010];
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
f[i]=max(f[i-1]+a[i],a[i]);
ans=max(ans,f[i]);
}
printf("%d",ans);
return 0;
}
一道普通DP题
状态易得:
f[i]=max(f[i-1]+a[i],a[i]);
不知不觉打了个分号
因为负数的存在
所以要取max(f[1~n])
完