大意:给一串数字,求最大子序列和。
分析:经典DP同1231。
if(dp[j-1] < 0)
dp[j] = a[j] ;
else
dp[j] = dp[j-1]+a[j] ;
代码:
#include <iostream> #include<cstdio> using namespace std; int main() { int t,num=0; scanf("%d",&t); while(t--) { int n,a; scanf("%d",&n); int sum=0,max=-1001,start,end,flag=1; for(int i=0;i<n;i++) { scanf("%d",&a); sum+=a; if(sum>max) { max=sum;start=flag;end=i+1; } if(sum<0) { sum=0;flag=i+2; } } num++; printf("Case %d: %d %d %d ",num,max,start,end); if(t!=0) printf(" "); } return 0; }