【发布时间】:2013-06-09 15:42:50
【问题描述】:
我被要求在 2 名玩家之间用 c 语言开发一个纸牌游戏,玩家可以从卡片列表中选择最左边或最右边的卡片,例如: 如果列表是:[2,14,12,6,20,10],玩家可以选择 2 或 10。 最后得分较高的玩家(玩家选择的牌的总和)赢得比赛。 有没有办法优化玩家的选择,因为知道并不总是最好的选择是最大值(例如:在上述情况下选择 10 会给其他玩家选择 20 的机会)。 (听起来是递归函数……)
【问题讨论】:
-
看一看,例如,Alpha-beta 剪枝算法。
-
我相信使用dynamic programming 可以有效地解决这个问题。您只需为给定子列表创建一个递归表达式即可获得最大回报。根据该表达式,您将计算一个矩阵,使得条目
[i,j]包含从i开始到j结束的子列表的最大结果。 (应该是 O(n^2) 而不是天真的详尽搜索,可能是 O(2^n))