状态:f[i]:以i为结尾最长连续序列状态转移:f[i]=max{f[i-1]+rem[i],rem[i]}初始状态:f[0]=rem[0];#include<iostream> #define maxn 10000+5 using namespace std; int rem[maxn]; int f[maxn]; int st[maxn]; int main() { cin.sync_with_stdio(false); int n; while(cin>>n&&n) { for(int i=0;i<n;i++) cin>>rem[i]; f[0]=rem[0]; st[0]=0; int maxx=f[0]; int num=0; for(int i=1;i<n;i++) { if(f[i-1]>0) f[i]=f[i-1]+rem[i],st[i]=st[i-1]; else f[i]=rem[i],st[i]=i; if(f[i]>maxx) num=i,maxx=f[i]; } if(maxx<0) cout<<"0"<<" "<<rem[0]<<" "<<rem[n-1]<<endl; else cout<<maxx<<" "<<rem[st[num]]<<" "<<rem[num]<<endl; } return 0; }
hdu 1231 最大连续子序列
最新推荐文章于 2021-05-25 01:49:32 发布