C++卡片游戏

本文介绍如何使用C++编程语言设计和实现一款卡片游戏。从基本的数据结构设计到游戏逻辑的实现,详细探讨了C++在游戏开发中的应用。
摘要由CSDN通过智能技术生成
/*
	蒜头君设计了一个双人游戏,在桌面上放置一排 n 张卡片,第 i 张卡片上有一个数字 a_i。
	两个人轮流取走一张卡片,直至全部取完。注意每次只能取这一排卡片中的第一张或最后一张。最后取得卡片的数字和最高的玩家获胜。
	蒜头君和花椰妹开始玩这个游戏。蒜头君先手,他可以使用任意策略。花椰妹计算能力有限,
	所以她只单纯地使用贪心策略,即取两张卡片中数字较大的一张,如果两张卡片数字相同,则取第一张。

	现在蒜头君想知道,在最佳策略下,他取得的分数会比花椰妹高多少?

	例如 4 张卡片,3 2 10 4。轮流取的卡片为 3, 4 ,10, 2 答案为 (3 + 10) - (4 + 2) = 7


	区间dp,用递归去转移更直观一些
	DP(l, r, p) : [l, r]表示剩余卡牌区间,p表示此时取卡片的玩家,p=0表示蒜头君,p=1表示花椰妹。
	返回值为蒜头君得分和花椰妹的差值

	p = 0 采用最佳策略,需要考虑子局面的分数:DP(l, r, 0) = max(DP(l, r - 1, 1) + a[r], DP(l + 1, r, 1) + a[l]);

	p = 1 采用贪心策略,a[l] < a[r], DP(l, r, 1) = DP(l, r - 1, 0) - a[r];
						a[l] >= a[r], DP(l, r, 1) = DP(l - 1, r, 0) - a[l];
*/

#include <iostream>
using namespace std;
const int maxn = 1005;
int dp[maxn][maxn]; 
bool vis[maxn][maxn]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值