9月27日的月赛一道关于最大子序列和的题:
描述
中秋节到了, 和 yjm和zst 在宿舍又开始了美妙的“御宅”生活,午饭时间到了,通过一个游戏来决定谁去带饭。
输入
第一行输入一个整数n(1≤ n≤ 20) ,表示两人进行游戏的次数。
第二行包含 n 个整数,整数之间用空格隔开,第 i 个整数 hi (−10≤ hi≤ 10) 表示 yjm每局游戏的得分。
输出
若 yjm总得分不为负,则输出 “YES” ,且计算出在一段连续的比赛中(连续比赛不一定从第一局开始) yjm的最高得分(该得分单独计算)。
反之,则只输出 “NO”
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;cin>>n;
int a[25];
for(int i=1;i<=n;i++)
cin>>a[i];
int Max=0,ans=0;
for(int i=1;i<=n;i++)
{
int tep=0;ans+=a[i];
for(int j=i;j<=n;j++)
{
tep+=a[j];
if(tep>Max)
Max=tep; //维护当前分数的最大值
}
}
if(ans>=0)
{
cout<<"YES"<<endl<<Max;
}
else cout<<"NO";
}