【发布时间】:2021-12-28 05:44:23
【问题描述】:
考虑一个包含 n 个正整数值的硬币和两个玩家 player1 和 player2 的数组。每个玩家轮流拿硬币,直到剩下硬币。那个有
最大值获胜。玩家可以拿走的硬币数量由变量 S 初始 =1 控制,玩家可以从左边连续拿走 k 个硬币,其中 1我们必须找到最大数量
玩家1可以在游戏中获得的硬币价值
例如:如果输入是 [3,6,8,5,4],输出应该是 12,因为如果玩家 1 拿了一个硬币,玩家 2 拿了 2 个硬币,然后玩家 1 重新拿了 2 个硬币。所以player1
将有 3 + 5 + 4 = 12。
我的想法:我觉得可以使用动态编程来实现它,但我找不到子问题或最优子结构。条件看起来非常复杂。关于如何解决这个问题的任何想法?
【问题讨论】:
-
如果找不到子问题,是什么让您认为动态规划是一种可能/好的方法?
-
子问题由剩余的硬币和 S 的值定义。例如,如果 player1 拿了一枚硬币,则子问题是
[6,8,5,4]和S=1。但是如果 player1 拿了两个硬币,子问题是[8,5,4]和S=2。
标签: algorithm dynamic-programming