#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],dp[N];
int main()
{
int t,k=0;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
cin>>a[i];
dp[1]=a[1];
for(int i=2; i<=n; i++)
{
if(dp[i-1]<0)//(dp[i-1]+a[i]<a[i])
dp[i]=a[i];
else
{
dp[i]=dp[i-1]+a[i];
}
}
int l,r;//确定边界
int maxn=dp[1];
r=1;
for(int i=2; i<=n; i++)
{
if(dp[i]>maxn)
maxn=dp[i],r=i;//dp[i]最大时,右边界为i
}
int m=0;
l=r;//寻找左边界的值
for(int i=r; i>0; i--) //从右向左寻找
{
m=m+a[i];
if(m==maxn)//如果相加的和(m的值)为最大值,左边界为i的值
{
l=i;
}
}
cout<<"Case "<<++k<<":" << endl <<maxn<<" "<<l<<" "<<r<<endl;//依次输出
if(t)
cout<<endl;
}
return 0;
}
Max Sum
最新推荐文章于 2023-06-14 21:55:50 发布