入门dp,最大子段和
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 100010
int p[maxn],n;
int dp[maxn];
void solve()
{
memset(dp,0,sizeof dp);
dp[0] = p[0];
int ans = p[0];
int s =1, e = 1;
int rs =1,re = 1;
for(int i=1;i<n;i++)
{
if(dp[i-1]+p[i]>=p[i])
{
dp[i] = dp[i-1]+p[i];
e = i+1;
}
else
{
dp[i] = p[i];
s = e = i+1;
}
if(dp[i]>ans)
{
ans = dp[i];
rs = s;
re = e;
}
}
cout << ans <<" " << rs << " " << re<< endl;
}
int main()
{
int T,cnt=1;
cin >> T;
while(T--)
{
cin >> n;
for(int i=0;i<n;i++) scanf("%d",&p[i]);
printf("Case %d:\n",cnt++);
solve();
if(T) printf("\n");
}
return 0;
}