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; }