1. 程式人生 > >1007 Maximum Subsequence Sum

1007 Maximum Subsequence Sum

cstring mes img 圖片 最大和 ios 序列 inf 子序列和

一開始以為用前綴和做,看了下數據10000,果斷放棄。

思考了一下,最大和序列的第一個數必為正數(廢話),關鍵是從頭開始的子序列和也必為正數。如果加到某個地方和為負數,我還要你前面這些數何用,不如從後面開始重新選。基於上述思路就可以寫出代碼了。

技術分享圖片
#include <iostream>
#include <cstring>
#include <string>
#include <sstream>
#include <string>
#include <cstdio>
#include <algorithm>
#include 
<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; }
View Code

1007 Maximum Subsequence Sum