可以用dp和分治法,我用了dp写比较容易。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int sum, s, e;
int a[100005];
void getit()
{
int num, t, ss;
sum = -100000;
cin >> num;
for(int i = 1; i <= num; ++ i)
cin >> a[i];
t = 0, s = ss = 1, e = 1;
for(int i = 1; i <= num; ++ i)
{
t += a[i];
if(t > sum)
{
sum = t;
s = ss;
e = i;
}
if(t < 0)
{
t = 0;
ss = i + 1;
}
}
}
int main()
{
int nn;
cin >> nn;
for(int no = 1; no <= nn; ++ no)
{
cout << "Case " << no << ":" << endl;
getit();
cout << sum << " " << s << " " << e << endl;
if(no < nn) cout << endl;
}
return 0;
}
`