题目连接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/J
#include<iostream> #include<cstdio> using namespace std; int main() { int t,n,now,before,max,s,e,x,cnt=0; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&now); if(i==1)//注意是等号等号!!!不要写错 { max=before=now; s=x=e=1; } else { if(now>now+before)//如果前面的是负数就从当前开始 { before=now; x=i; } else before+=now; if(before>max)//加了当前的值后,大于max,才更新max,保证了max 是最大值 { max=before; s=x; e=i; } } } printf("Case %d: %d %d %d ",++cnt,max,s,e); if(t) printf(" "); } return 0; }