2022安徽省赛-H选左选右

题目描述

航天博物馆中有一个互动游戏。给出N个数字(C1、C2、C3、…、CN)排成一排,现有A和B两个人轮流取数字,每次可以取当前剩余数字中最左侧或者最右侧之一并拿走。最终每个人分数是拿到的数字之和。分数较高者将获得航天纪念品一个。

游戏开始时,A先取数字,两人都会按照最优策略来取数字,现在想知道A先手可以拿到最多的分数是多少?

输入说明

第一行:单个整数N,表示一共多少个数字,1≤N≤5000

第二行到第N+1行:第i+l行有一个整数Ci,1≤Ci≤5000

输出说明

一个整数,表示如果双方都按最优策略玩游戏,A先手可以得到的分数。

输入样例

4
30
25
10
35

输出样例

60

AC代码

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n;
	cin >> n;
	int num[n];
	int dp[n];
	int sum = 0;
	for(int i = 0; i < n; i++) {
		cin >> num[i];
		sum += num[i];
		dp[i] = num[i];
	}
	for(int i = n - 1; i >= 0; i--) {
		for(int j = i + 1; j < n; j++) {
			dp[j] = max(num[i] - dp[j],num[j] - dp[j - 1]);
		}
	}
	cout << (sum + dp[n - 1]) / 2;

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值