#672. NOIP2015TG-27
NOIP2015TG-27
当前没有测试数据。
27.(完善程序)
(双子序列最大和)给定一个长度为 的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出这个最大和。一个连续子序列的序列和为该连续子序列中所有数之和。要求:每个连续子序列长度至少为 ,且两个连续子序列之间至少间隔 个数。(第五空 4 分,其余 2.5 分)
#include<iostream>
using namespace std;
const int MAXN=1000;
int n,i,ans,sum;
int x[MAXN];
int lmax[MAXN];
//lmax[i]为仅含x[i]及x[i]左侧整数的连续子序列的序列和中,最大的序列和
int rmax[MAXN];
//rmax[i]为仅含x[i]及x[i]右侧整数的连续子序列的序列和中,最大的序列和
int main(){
cin>>n;
for(i=0;i<n;i++)
cin>>x[i];
lmax[0]=x[0];
for(i=1;i<n;i++)
if(lmax[i-1]<=0)
lmax[i]=x[i];
else
lmax[i]=lmax[i-1]+x[i];
for(i=1;i<n;i++)
if(lmax[i]<lmax[i-1])
lmax[i]=lmax[i-1];
____________________;
for(i=n-2;i>=0;i--)
if(rmax[i+1]<=0)
____________________;
else
____________________;
for(i=n-2;i>=0;i--)
if(rmax[i]<rmax[i+1])
____________________;
ans=x[0]+x[2];
for(i=1;i<n-1;i++){
sum=____________________;
if(sum>ans)
ans=sum;
}
cout<<ans<<endl;
return 0;
}
①:{{ input(1) }}
②:{{ input(2) }}
③:{{ input(3) }}
④:{{ input(4) }}
⑤:{{ input(5) }}