问题描述:

卡牌游戏问题
  小a和小b玩一个游戏,有 n张卡牌,每张上面有两个正整数 xy。取一张牌时,个人积分增加 x,团队积分增加 y。求小a,小b各取若干张牌,使得他们的 个人积分相等,且 团队积分最大

用例描述:

输入:
4  # n=4 组数据
3 1  # x, y
2 2
1 4
1 4
输出:10  # 团队积分最大为10

问题分析:

这个题目类似01背包问题,我们可以这样理解,小a的得分 - 小b的得分 = 0,所以每组数据可以设置三种状态k = (-1, 0, 1)-1表示这张卡牌小a要,0表示这个卡牌谁也不要,1表示这张卡牌小b要。

(1)方法1:现在可以使用穷举法,找到所有组合,然后获取团体得分的最大值,这个还可以使用三进制数,例如0、1、2,每一个组合一定会得出一个三进制数,然后遍历每一位,0不要,1给小a,2给小b,总之够麻烦。

(2)方法2,dp方法:从网上查考了很多方法,最终感觉还是这个方法比较简单易懂点。参考链接为:https://www.jianshu.com/p/83204e62ac94

# dp状态转换方程如下:dp[i][j]=max(d[i-1][j], d[i-1][j-x[i-1]) + y[i-1], d[i-1][j+x[i-1]] + y[i-1])# dp[i][j]表示前 i 张卡牌中,且两人得分的差为 j 时团队得分的最大值

Python3实现:

def getMaxGain(n, x, y):mx = max(x)  # 获取最大值,作为差的边界dp = [[0] * (mx+1) for _ in range(n+1)]  # 初始化dpfor i in range(1, n+1):for j in range(mx+1):tmp1, tmp2 = 0, 0if j - x[i-1] >= 0:  # 这张卡牌给小atmp1 = dp[i-1][j-x[i-1]] + y[i-1]if j + x[i - 1] <= mx:  # 这张卡牌给小btmp2 = dp[i-1][j+x[i-1]] + y[i-1]dp[i][j] = max(dp[i - 1][j], tmp1, tmp2)  # 三种状态的最高得分if i == 1 and j == 0:  # 只有一张卡牌时dp[i][j] = 0return dp[n][0]if __name__ == '__main__':n = 4x = [3, 2, 1, 1]y = [1, 2, 4, 4]print(getMaxGain(n, x, y))

声明:如有不妥或问题还请您,批评指正,自己只是学习总结,不涉及其他,大神略过哦。参考大神的部分已经给出链接,可以去学习他人的思路。

算法题 - 卡牌游戏问题 - Python相关推荐

  1. CCF201612-5 卡牌游戏(募集解题代码)

    试题编号: 201612-5 试题名称: 卡牌游戏 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 小Q和小M是游戏数值策划师,他们最近在测试自己新设计的卡牌对战游戏.游戏总共 ...

  2. 【概率DP】$P2059$ 卡牌游戏

    [概率DP]P2059 卡牌游戏 链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张 ...

  3. 卡牌游戏战斗系统的设计和实现二

    卡牌游戏战斗系统的设计和实现二 http://www.lxway.com/4418844614.htm 在一篇文章中,我更多的是从游戏理论的角度,讨论了战斗的系统的设计.这篇文章中,我将从程序的角度, ...

  4. 卡牌游戏源代码(原创)(控制台)

    游戏预览: 完成度90%,约3000行,过年这几天全用在这上面了 由于尚未学到QT等,因此只能在黑窗口下面制作了 未完成的部分: ①战斗代码未优化(800行,精简后应该能降到200行左右) ②关卡掉落 ...

  5. 本科课程【虚拟现实引擎Unity3D】实验4 - 卡牌游戏完善

    大家好,我是[1+1=王], 热爱java的计算机(人工智能)渣硕研究生在读. 如果你也对java.人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!! Good better best, never ...

  6. Day4 T2 卡牌游戏

    题目   小X为了展示自己高超的游戏技巧,在某一天兴致勃勃地找小Y玩起了一种卡牌游戏.每张卡牌有类型(攻击或防御)和力量值两个信息.小Y有n张卡牌,小X有m张卡牌.已知小X的卡牌全是攻击型的. 游戏的 ...

  7. 6招深入进行 Cocos 卡牌游戏优化!《新斗罗大陆》研发团队经验分享

    引言:不久前在 Cocos Star Meetings 上海站,OMNIDREAM GAMES 的前端主程铁树,分享了团队一款在研卡牌游戏的优化方案.本文为分享实录.( PS. 公众号后台回复关键字[ ...

  8. 【JLOI2013合集】BZOJ3090 赛车 BZOJ3091 卡牌游戏 BZOJ3092 删除物品 BZOJ3093 地形生成...

    赛车: 这个题就是水平可见直线.. 水平可见直线怎么做呢.. 就是把所有直线按斜率排序.然后从前往后处理边. 当中维护一个栈.如果当前线和栈顶的交点在栈顶和栈顶-1的交点左边.那么弹掉栈顶.. (可以 ...

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

    看到这题,真的忒简单啊! 咳咳,开个玩笑.关于这题: 题目描述 轩轩某天想到了一个卡牌游戏,游戏规则如下: 初始时轩轩的手中有自左向右排成一排的 n 张卡牌,每张卡牌上有一个整数分值. 接下来,轩轩每 ...

最新文章

  1. vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标
  2. bzoj4033:[HAOI2015]树上染色
  3. 深度探索C++ 对象模型(5)-Initialization list(3)
  4. android 组件 线程,Android UI线程和非UI线程
  5. Verilog功能模块——取滑动平均值(使用寄存器组)
  6. 下滑加载更多js_专治:卫生间免砸砖,房顶漏水,JS堵漏王水不漏,厂家三包产品,免费成熟配方(点开看更多)...
  7. Codeforces - 102222C - Caesar Cipher
  8. Centos7 yum 安装 oracle-rdbms-server-11gR2-pre
  9. apache2.4 php5.5 配置,求助,apache2.4+php5.5,配置好不能运行,错误信息如下
  10. SonarQube 7.7默认数据库连接方法
  11. ‘’vr‘’全景抓鸡游戏总结
  12. 计算机软件考试难,计算机技术与软件专业技术资格考试难吗
  13. FreeCAD源码分析:FreeCADApp模块
  14. 百度NLP词 语相似度接口Demo
  15. LSTM+CNN模型厄尔尼诺事件预测
  16. 【开发规范】持续更新中......
  17. 打造高质量的私域朋友圈,让营销效果翻倍
  18. 网线的制作及交换机的基本配置
  19. 有向图邻接矩阵幂的意义
  20. 代码 马佳义_马佳义 教授

热门文章

  1. 私密聊天加密聊天伪装界面聊天软件产品UI分析,qiaoyu5,feige5
  2. 17期-什么是MySQL数据库?看这一篇干货文章就够了!
  3. 单片机理论篇(未完成)
  4. 德蕾莎修女---一个伟大的人
  5. 设计模式之六:工厂方法模式(Factory method Pattern)
  6. 本学期3个sprint的团队贡献分
  7. 区块链-区块链的概念
  8. 一,银行软件测试工作总结
  9. 《笨方法学 Python 3》31. 作出决定
  10. 通话质量好的蓝牙耳机有哪些?通话质量好的蓝牙耳机盘点