问题:给出一串数,求最大子序列的和。
sample input:
sample output:2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5
分析:Case 1: 14 1 4 Case 2: 7 1 6
基础DP,累计和s,大于零时开头结尾不变,小于零时重置开头结尾。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
//freopen("s.txt","r",stdin);
int n,m=1;
cin>>n;
while(n--){
int i,t,a[100000],sum=-10000,s=0,e,st=1,p=1;;
cin>>t;
for(i=1;i<=t;i++){
cin>>a[i];
}
for(i=1;i<=t;i++){
s+=a[i];
if(s>sum){
sum=s;
e=i;
st=p;
}
if(s<0){
s=0;
p=i+1;
}
}
cout<<"Case "<<m<<":"<<endl;
cout<<sum<<" "<<st<<" "<<e<<endl;
if(n!=0)
cout<<endl;
m++;
}
return 0;
}