PAT1007. Maximum Subsequence Sum

#include<climits>
#include<iostream>
using namespace std;
int sum[10004],val[10004];
int main(){
  int cnt;cin>>cnt;
  for(int i=0;i<cnt;++i){
    cin>>val[i];
    sum[i]+=(i?sum[i-1]+val[i]:val[i]);
  }
  int mmax=INT_MIN,_i,_j;
  for(int i=0;i<cnt;++i)
    for(int j=i;j<cnt;++j){
      int tmp=sum[j]-sum[i]+val[i];
      if(tmp>mmax)mmax=tmp,_i=i,_j=j;
    }
  if(mmax<0)cout<<0<<' '<<val[0]<<' '<<val[cnt-1];
  else cout<<mmax<<' '<<val[_i]<<' '<<val[_j];    
}
做下预处理就能在线性时间内求出序列中任意区间内数字之和

你可能感兴趣的:(PAT1007. Maximum Subsequence Sum)