hdu1231 最大连续子序列
src:http://acm.hdu.edu.cn/showproblem.php?pid=1231
思路:状态转移方程dp[i]=max(dp[i-1]+val[i],val[i]),连续子序列就是考虑要不要加上前面的~~子序列就要考虑前面所有的阶段~
ac代码:
#include<bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(int i=a;i<=b;i++) #define inf 99999999 int n,val[10005]; int dp[10005]; int mm=0; void init() { mm=-1; memset(val,0,sizeof(val)); memset(dp,0,sizeof(dp)); } int main() { std::ios::sync_with_stdio(false); int k=-1; while(cin>>n&&n!=0){ init(); FOR(i,1,n)cin>>val[i]; for(int i=1;i<=n;i++){ dp[i]=max(dp[i-1]+val[i],val[i]); } //FOR(i,1,n)cout<<dp[i]<<' ';cout<<endl; FOR(i,1,n){ if(dp[i]>mm){ mm=dp[i];k=i; } } //cout<<"mm:"<<mm<<endl; if(mm==-1){ cout<<"0 "<<val[1]<<' '<<val[n]<<endl; } else { int beg=1; for(int j=k;j>=1;j--){if(dp[j]<0){beg=j+1;break;}} if(beg==-1)beg=1; cout<<mm<<' '<<val[beg]<<' '<<val[k]<<endl; } } return 0; }

浙公网安备 33010602011771号