注:最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序列
#include<iostream>
using namespace std;
int a[100001]={0},str[100001]={0},start[100001];
int main()
{
int n,m,i,max,k,num=1;
cin>>n;
while(n--){
cin>>m;
for(i=1;i<=m;i++)
cin>>a[i];
str[1]=a[1];
start[1]=1;
for(i=2;i<=m;i++){
if(str[i-1]>=0){
str[i]=str[i-1]+a[i];
start[i]=start[i-1];
}
else{
str[i]=a[i];
start[i]=i;
}
}
max=str[1];k=1;
for(i=2;i<=m;i++){
if(str[i]>max){
max=str[i];
k=i;
}
}
cout<<"Case "<<num<<":"<<endl;
cout<<max<<" "<<start[k]<<" "<<k<<endl;
num++;
if(n)
cout<<endl;
}
return 0;
}