简单的NIM游戏解决策略
硬币游戏
Alice和Bob正在玩这样一个游戏,给定k个数字a1,a2,…,ak。一开始有n堆硬币,每堆硬币各有xi枚硬币。Alice和Bob轮流选出一堆硬币,从中取出一些,取出的数量必须在给定的k个数字a1,a2,…,ak中。Alice先取,取光硬币的一方获胜。双方都采用最优策略,谁会获胜?题目保证a1,a2,…,ak中一定有1。
终态的SG值为0,SG[0] = 0;
每一个点,自己所能到达的点集合为set的话,都是要根据前面的状态推出来的。DP的感觉有没有。先上个递归的伪代码:
int SG(int x)
{
if(x == 0) return 0;
set s = {};
for(int i = a1,a2...)
insert SG(x - i) to s;
return mex(s);
}
理解的差不多的话ÿ