最大子序列和问题

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";
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值