这最终是尼姆的游戏,经过一定的修改。
规则如下:
有两个球员A和B。
这场比赛有两堆火柴。最初,第一堆包含N个匹配,第二个包含M匹配。
球员交替转弯;A先上场。
在每一回合,当前玩家必须选择一堆,并移除一个正数的匹配(不超过该堆上当前的匹配数)。
只有当另一桩中的匹配数除以X时,才允许从一个桩中删除X个匹配项。
从任何一堆中取得最后一场比赛的选手获胜。
两位球员都发挥得很好。
我的看法:
假设我们有2桩2 7,我们有3例可以将第2桩减少到wiz :2 1,2 3,2 5,如果A在最优的情况下,他/她会选择2 3,这样B剩下的唯一机会是2 1,然后A可以0 1获胜。解的外壳是,如果A或B遇到任何可能在下一步中直接失败的情况,那么它将尽力避免它,并利用这种情况对他们有利,只需在失去阶段前一步离开。
但是对于一些未知的测试用例,这种方法失败了,是否有更好的方法来找到胜利者,或者任何其他违背这一逻辑的测试用例。
发布于 2019-05-06 21:43:30
这是一个典型的动态规划问题。首先,找出一个重复的关系,用小游戏来描述一个游戏的结果。这里的参数是X和Y,其中X是一个堆栈中的匹配数,另一个是Y。如何减少这个问题?
那么,假设现在轮到我处理X匹配,假设Y可以被数字a1、a2和a3整除,而x可以被b1、b2、b3整除。然后,我有六个可能的转弯。该问题归结为(X-a1,Y) (X-a2,Y) (X-a3,Y),(X,Yb1),(X,Yb2),(X,Yb3).一旦这六个小游戏解决了,如果其中一个对我来说是一个胜利的游戏,那么我做出相应的动作并赢得这个游戏。
还有一个参数,那就是轮到谁了。这使可解决问题的规模翻了一番。
关键是找到所有可能的动作,并对其中的每一个重复,保持一个存储已解决的游戏效率。
基本情况需要自然解决。
https://stackoverflow.com/questions/56010643
复制相似问题