1004: 分花生游戏 (博弈论)
我们可以假设小谭拿了第一堆即m或者n,然后我们对第二堆展开讨论
第二堆简称two
two: 容易发现当two分成了1 | x时,先手的必胜, 所以把花生分成这样的人就会输。
如果数据很小 , 或者没有好的办法,我们可以尝试递推
f[i][j][0/1] one有i个 , two有j个 , 现在是谁先手
f[i][j][0] = 1 - f[i][j][1]
f[i][j][1] = f[t][k][0] | f[t][k][0] | ... ;
或者记搜
正解:
博弈论~~
从递推中我们知道在j可以分的那么多种方案中,只要有一种是必胜,那么就是必胜的
因此先手必胜的情况就很简单了~~哈哈,可惜我们不是先手
于是(不论打表还是顺推都可以)得到
如果存在两堆都为先手赢,那么这一堆就是后手赢 。
只要分成的两堆都不一样或者两堆都为先手输
那么这一堆就是先手赢
n和m不知道谁是第一堆哦~
ans = n的情况+m的情况
下面偷懒,以n为第一堆
(n-1)%5 == 3 或 4 或 0 都输
over~快乐每一天~~~
制霸西科大计划:poweroj 1004 分花生游戏(博弈论)
原文:https://www.cnblogs.com/cidai/p/11728521.html