题目:最大和
题意:给出数字T,T代表测试的数据组,然后给出n,n代表每组数据个数,求出每组数据的最大和的子序列,输出最大和还有子序列的起始和结束位置。
思路:问题是求出每组数据的最大和的子序列,需要注意的是子序列 起始结束位置的变化 。
代码:#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int T,n,i,p,t;
int first,end,max,sum;
int a[10001];
p=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
first=end=t=1;
max=-1000;
sum=0;
for(i=0;i<n;i++)
{
sum=sum+a[i];
if(sum>max)
{
max=sum;
first=t;
end=i+1;
}
if(sum<0)
{
sum=0;
t=i+2;
}
}
cout<<"Case "<<p++<<":"<<endl;
cout<<max<<" "<<first<<" "<<end<<endl;
if(T) printf("\n");
}
return 0;
}