#include<iostream> using namespace std; int main() { int n,a[100010],t=0,m; cin >> n; while(n--) { cin >> m; for(int i=0;i<m;i++) cin >> a[i]; int maxu = a[0]; int summ = 0; int endi = 0; int starti = 0; for(int i=0;i<m;i++) { if (summ>=0) summ = summ + a[i]; else summ = a[i]; if (maxu<summ) { maxu = summ; endi = i; } } int su = 0; for(int i = endi;i>=0;i--) { su = su + a[i]; if (su == maxu) { starti = i; } } t++; cout << "Case " << t << ":"<<endl; cout << maxu <<" "<<starti+1<<" "<<endi+1<<endl; if(n!=0) cout << " "; } return 0; }
首先是这种一行求连续最大值的思想,其次是oj可以先输出结果,然后再输入的话也能AC,最后的一个小错误是在循环里面定义了一个自变量导致每次循环都自动清零。