#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 100005;
int dp[maxn], g[maxn];
struct node {
int spos, epos;
};
node q[maxn];
int main()
{
int cas, t = 0, n;
cin >> cas;
while (cas--) {
memset(dp, 0, sizeof(dp));
memset(g, 0, sizeof(g));
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> g[i];
}
dp[0] = g[0];
q[0].spos = 0; q[0].epos = 0;
for (int i = 1; i < n; ++i) {
if (dp[i - 1] >= 0) {
dp[i] = dp[i - 1] + g[i];
q[i].spos = q[i - 1].spos;
q[i].epos = i;
} else {
dp[i] = g[i];
q[i].spos = q[i].epos = i;
}
}
int maxpos = 0, maxnum = -1005;
for (int i = 0; i < n; ++i) {
if (dp[i] >= maxnum) {
maxnum = dp[i];
maxpos = i;
}
}
cout << "Case " << ++t << ":" << endl;
cout << dp[maxpos] << " " << q[maxpos].spos + 1 << " " << q[maxpos].epos + 1;
if (cas) cout << endl << endl;
else cout << endl;
}
return 0;
}
HDU1003 Max Sum
最新推荐文章于 2022-03-03 08:27:19 发布