[省选联考 2020 B 卷] 卡牌游戏 题解c++

发布于:2022-12-20 ⋅ 阅读:(476) ⋅ 点赞:(0)

看到这题,真的忒简单啊!
咳咳,开个玩笑。关于这
题目描述
轩轩某天想到了一个卡牌游戏,游戏规则如下:

初始时轩轩的手中有自左向右排成一排的 n 张卡牌,每张卡牌上有一个整数分值。
接下来,轩轩每次可以选取卡牌序列最左边的连续若干张卡牌(至少 2张),将它们替换为一张新卡牌。新卡牌将插入到序列的最左端,它的分值为本次操作中被替换掉的卡牌的分值之和。
初始时轩轩总分为 0,每执行一次卡牌替换操作,新卡牌的分值将加到总分中。当序列长度为 1 时游戏结束,轩轩也可以在任意时刻结束游戏。
现在给出序列中各个卡牌的分值,请你来帮助轩轩计算他能够获得的最高总分是多少?
输入格式
第一行一个正整数 n,代表卡牌的数目。

接下来一行 n 个以空格分隔的整数,第 i 个数字 ai 代表自左向右第 i 张卡牌的分值。
输出格式
仅一行一个整数表示答案。
输入输出样例

输入#1

3
2 -1 2

输出#1

4

输入#2

7
-4 3 0 7 -3 -5 -3

输出#2

9`在这里插入代码片`

题目本质:前缀和(第一个前缀和,就是它本身不加)


所以,关键代码就是:

s+=x;
if (s>0&&i!=1) 
	ans+=s;

CODE:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//define ll long long
ll ans,x,s,n;
int main() {
	cin>>n;
	for (ll i=1;i<=n;i++) {
		cin>>_;//自己想想吧,别直接复制粘贴了
//		s+=x;
//		if (s>0&&i!=1) 
//			ans+=s;
	}
	cout<<ans;
	return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到