2 条题解
-
0
注意到 ,用前缀和暴力枚举是不成了,我们可以用dp来做。
设 为 的最大子段和,初始 。对于一个 ,无非就是两种情况:
当 时,无论如何 都不可能比 大,所以我们就开始一段新的区间;否则当 时,我们令其加上 以开始新的转移。
与LIS一样,答案并不一定就是 ,而是 。
#include<bits/stdc++.h> using namespace std; const int N=2e5+5,INF=0x3f3f3f3f; int n,f[N],ans=-INF; int main(){ scanf("%d",&n); for(int i=1,x;i<=n;i++){ scanf("%d",&x); if(i==1||f[i-1]<=0) f[i]=x; else f[i]=f[i-1]+x; ans=max(ans,f[i]); } printf("%d",ans); return 0; }
- 1
信息
- ID
- 797
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 4
- 标签
- 递交数
- 146
- 已通过
- 65
- 上传者