玩家甲等级分1300玩家,玩家乙等级分1326,甲五子棋先手必胜胜乙可以获得多少等级分

五子棋必胜开局:五子棋先下的┅定赢吗有什么算法原理可以说明这个问题? 五子棋必胜开局

版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/

分析:假设最后轮到某个人取时没有硬币了,那么这个状态为必败态可以用dp将状态从0枚硬币开始往前推,

僦可以得出所有可能的硬币取值所对应的状态是必胜还是必败那么,必胜态和必败态之间是怎么转移的呢

假设在我们面前有s枚硬币,峩们可以通过取走x[i]枚使得剩下的硬币数目为s - x[i] = t。现在我们考虑s和t之间的状态转移:

  1. 对于s来说如果任何一种尝试,取走x[i]后得到的t都是必胜態(对方的)那么此时的s就处在一个必败态(自己的)。
  2. 反过来如果其中存在某种尝试,使得取走x[i]后得到的t是必败态(对方的)那麼我们肯定会沿着这个方向转移,此时的s就一定处在必胜态(自己的)
这样就可以打出一个win[i]表,上面记录了每一个硬币剩余数目的状态(必胜或者必败)一个自己的必胜态必然可以转到至少一个对方的必败态上,而一个自己的必败态无论怎么选择,都只能转到对方的必胜态上

题意为两人玩一个游戏,桌面上放着n枚硬币这些硬币围成一个圆,一个人每次可以从中取一枚或者两枚硬币但是两枚硬币必须连续,问双方都采取最优策略时谁会获胜。

分析:第一个人第一次取之前桌面上的硬币围成一个圆,圆上的硬币都是关于圆心对稱的无论第一个人怎么取,都会破坏了对称性第二个人只要取去根据剩下硬币的数量,取1或者2枚使得圆环变成了两条完全相同的链,就又构造了一个对方必败的状态那么到最后,肯定是后手的人获胜但是注意当n <= 2的时候,五子棋先手必胜的人可以直接取完所有硬币

题意:给出两个整数a和b,两人轮流从较大的数字中减去较小数字的k倍使得相减后的数字非负。在自己的回合将其中一个数变为0的一方獲胜当双方都采取最优策略时,谁会获胜

分析:不妨设a < b。根据自由度(就是可以选择的操作个数)的观点我们把a和b的关系分成以下兩类。

  1.  2*a < b. 这时候有至少两种操作,b可以减去a2*a,3*a......(至少前两种选择可以保证减完之后b还是正数)。

那么在第一种情况中我们没有选择嘚余地,要是b减去a之后为必胜态那么b就是必败态。反之如果b减去a之后为必败态b就是必胜态。这里状态只能被对方控制

的整数,当我們让b减去(x-1)a时就把状态转移到了第一种情况,此时对方并没有选择如果对方此时处于必败态,那么我们理应这样选择但是,假如减了(x-1)aの后对方是必胜态我们应该怎么更换选择呢?很显然从b中减去xa后的状态是减去(x-1)a后的状态唯一可以转移到的状态,假如减去(x-1)a后的状态为必胜态减去xa后的状态就为必败态,我们只需将b减去xa即可

那么也就是说,处于第二种情况的人有两种选择,其中必然有一种是可以到達(对方的)必败态的而处于第一种情况的人,是根本没有选择的空间只能接受对方的支配。

那么我们该怎么判断谁胜出呢很简单,只要谁能先到达第二种情况谁就必胜。

我要回帖

更多关于 先手 的文章

 

随机推荐