PLA_Nh level
获赞
41
粉丝
19
关注
55
看过 TA
303
南通大学
2024
Java
IP属地:江苏
暂未填写个人简介
私信
关注
03-06 11:16
南通大学 Java
不想泡池子的青提在求佛:你可以往成都投投简历,他们那边是接收南通的
0 点赞 评论 收藏
分享
2021-07-17 20:16
南通大学 Java
我们可以从1枚举完所有n=1,m=k的情况,这些都是必胜态。但是为什么可以认为接下来n=2的0为必败态(A[2][3]==0),用作踏板来进一步得到到达必输态的所有步数呢?请问如何确定他是必败的?这个n=2的0可不可能也是一个必胜态,只是当前几步走不到而已呢?比如5 7,他可以减到的组合很多,怎么确定它所有的走法都会导致必胜态呢?数据很大时要一一列举判断吗。求解
NCHU19207325:必败态的定义就是,”面对当前状态的选手一定会输“的状态。而我们又知道这个游戏没有平局,所以在所有状态中除了必败态的那些状态都是必胜态(这个状态不是必败态,也就是说必定存在至少一种最优的策略,使得只要你按这种策略走,无论对方怎么走,你都能必胜,否则如果不存在这种能让你必胜的策略,那你就是必败的了,总不能平局吧)。清楚了这个概念之后就可以开始打表了。 这里我们用(n,m)这种写法来枚举状态,同时保证 m>n(不考虑 m=n 的情况,太明显了),毕竟 (1,2)和(2,1)是一样的嘛。 首先我们知道最初的必败态是(0,0),很显然嘛,题目里都说了,谁没法拿石子谁就输,所以如果你遇到了(0,0),那你就输了,所以(0,0)是必败态。然后我们看(1,m),很显然(1,m)都能通过一次操作走到(0,0),也就是说让后手的玩家碰到必败态,所以(1,m)都是必胜态,然后我们看(2,3),发现(2,3)不能一次操作走到(0,0),也就是说对(2,3)进行一次操作以后后,后手玩家一定会碰到必胜态 【 因为(2,3)之前的状态除了(0,0)都是必胜的,而且你又走不到(0,0)】,即(2,3)是个必败态,然后其他的(2,m)都可以一次操作走到(2,3),所以当 n 为 2 时,除了(2,3)都是必胜的。 继续推下去,易得出(3,m)和(4,m)也都是必胜的(都能一次操作走到(2,3))。 然后看 n=5时,(5,6)必胜,因为可以一次走到(2,3),(5,7)不能一次走到(2,3),也不能一次走到(0,0),而(5,7)其他能走的状态前面已经枚举过了,都是必胜态,所以(5,7)也是必败的。 一直这样递推下去,打表就OK了。我们用一个集合存好全部的必败态,集合最开始只有一个元素(0,0),每次遇到一个新的状态就判断一下它能否跳到存着所有必败态的集合中的任意一个状态,如果能,则说明这是必胜态,如果不能,则这是一个新的必败态,把他加入集合之中去,暴力跑完所有状态就行了。
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务