/*
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,i,sum,x,N;
int begin,end;
cin>>N;//Case 个数
for(x=1;x<=N;x++)
{
sum=0;
int max=-1001;
cin>>n;//每一个Case中数组大小
vector<int>arr(n,0);//创建动态数组
for(i=0;i<n;i++)
cin>>arr[i];
begin=1;
for(i=0;i<n;i++)
{
sum=sum+arr[i];
if(sum>max)
{
max=sum;
end=i+1;
}
if(sum<0)
{sum=0;//当sum的结果是负数时,我们就把下一个数组的值交给sum,比如2,-3,这时sum=-1,我们就不要这个结果了,
//因为他已经不可能是最大值了,就令sum=0
begin=i+1;
}
}
cout << "Case " <<x << ":" << endl;
cout << max << " " << begin << " " << end << endl;
}
return 0;
}
*/
#include<iostream>
using namespace std;
int arr[100001],dp[100001];
int main() {
int T,n,i=1;
cin>>T;
while(T--) {
cin>>n;
for(int i=0;i<n;i++)
cin>>arr[i];
dp[0] = arr[0];
int start = 0,endd = 0,maxx = -1001;
int first = 0,second = 0;
for(int i=0;i<n;i++) {
if(dp[i-1]>=0) {
dp[i] = dp[i-1]+arr[i];endd = i;
}
else {
dp[i] = arr[i];start = endd = i;
}
if(maxx<=dp[i]) {
maxx = dp[i];first = start;second = endd;
}
}
cout<<"Case "<<i++<<":"<<endl<<maxx<<" "<<first+1<<" "<<second+1<<endl;
if(T!=0)
cout<<endl;
}
}
虽然AC了,但不知道是不是用了动态规划。。。。