a[i]表示以第i个元素为结尾的最大子序列和。
通过一个例子我们可以推导出此递归产生式:a[i]=max(a[i],a[i-1]+a[i]);
比如
1 5 -3 2 4
a[0]=1;
a[2]=1+5=6;
a[3]=1+5+(-3)=3;
a[4]=3+2=5;
a[6]=5+4=9;
1 -2 3 4 -10 6
a[0]=1;
a[1]=-1;
a[2]=3;
a[3]=3+4=7;
a[4]=7+(-10)=-3;
a[5]=6;
#include<iostream>
#include<limits.h>
using namespace std;
const int maxn=1000000;
long long a[maxn];
long long res[maxn];
int n;
//long long表示最大范围是(-2^63,2^63-1)
int main(){
while(cin>>n){
long long answer=-INT_MAX;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=1;i<n;i++){
a[i]=max(a[i],a[i-1]+a[i]);
answer=max(answer,a[i]);
}
cout<<answer<<endl;
}
return 0;
}


京公网安备 11010502036488号