1007 Maximum Subsequence Sum
阿新 • • 發佈:2018-12-01
cstring mes img 圖片 最大和 ios 序列 inf 子序列和
一開始以為用前綴和做,看了下數據10000,果斷放棄。
思考了一下,最大和序列的第一個數必為正數(廢話),關鍵是從頭開始的子序列和也必為正數。如果加到某個地方和為負數,我還要你前面這些數何用,不如從後面開始重新選。基於上述思路就可以寫出代碼了。
#include <iostream> #include <cstring> #include <string> #include <sstream> #include <string> #include <cstdio> #include <algorithm> #includeView Code<vector> #define maxn 10005 #define INF 0x3f3f3f3f #define EPS 1e-6 #define pi acos(-1.0) using namespace std; typedef long long ll; int n; int a[maxn]; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int flag; for(flag=1;flag<=n;flag++) {if(a[flag]>=0) break; } if(flag==n+1) { cout<<0<<" "<<a[1]<<" "<<a[n]<<endl; return 0; } int maxx=-1; int sum=0; int s,t,tmp=1; for(int i=1;i<=n;i++) { sum+=a[i]; if(sum>maxx) { maxx=sum; s=tmp; t=i; } else if(sum<0) { sum=0; tmp=i+1; } } cout<<maxx<<" "<<a[s]<<" "<<a[t]<<endl; return 0; }
1007 Maximum Subsequence Sum