#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
int n;cin>>n;
for(int i=1;i<=n;++i)
{
if(i!=1)cout<<endl;
printf("Case %d:\n",i);
int cnt;cin>>cnt;
vector<int>val(cnt+1,-1);
for(int i=1;i<=cnt;++i)scanf("%d",&val[i]);
int ll,rr,l,mmax=-11111,sum=-1;
for(int i=1;i<=cnt;++i)
{
if(sum>=0)sum+=val[i];
else sum=val[l=i];
if(sum>mmax)ll=l,rr=i,mmax=sum;
}
printf("%d %d %d\n",mmax,ll,rr);
}
}
动态规划,假设当前在i号位,当前问题为:“以i号结束的子序列的最大和sum[i]”,再考虑子问题sum[i-1]的作用就很清楚了。sum[i]=max(sum[i-1]+val[i],val[i])
1003
最新推荐文章于 2021-05-08 23:53:49 发布