硬币游戏1(博弈论入门题)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬币游戏1(博弈论入门题)相关的知识,希望对你有一定的参考价值。

题目链接:挑战程序设计竞赛p305

题意:一开始有X枚硬币,有K种取法,a[1],a[2]......a[k],取走最后一枚硬币为胜利者,两个人取硬币,都以最优策略取硬币,Alice先取,问最终谁是胜利者。

动态规划的思想(轮到Alice取硬币):

1.剩下0枚硬币,Alice为必败态。

2.剩下i枚硬币,存在一种情况 i - a[ j ] 为必败态,Alice为必胜态。

3.剩下i枚硬币,任何情况 i - a[ j ] 为必胜态,Alice为必败态。

 1 void solve()
 2 {
 3     win[0]=false;//0枚,必败态 
 4     for(int i=1;i<=X;i++)
 5     {
 6         win[i]=false; 
 7         for(int j=1;j<=K;j++)//找到一种情况对手为必败态就OK 
 8         {
 9             win[i]|=(a[j]<=i&&!win[i-a[j]]);//如果对手是必败态,自己就是必胜态 
10         }
11     }
12 }

 

以上是关于硬币游戏1(博弈论入门题)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 [P2964] 硬币的游戏

博弈论题表(好少~~~)

博弈论基础

POJ 2484博弈——对称法

POJ 2484博弈——对称法

ACM博弈论SG函数入门:博弈树SG函数的转移与子游戏的合并