POJ 2068 Nim

Posted Flowersea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2068 Nim相关的知识,希望对你有一定的参考价值。

链接:

http://poj.org/problem?id=2068

题意:

传统的Nim游戏由两名玩家进行,在一堆石头中,双方轮流取走任意合法数量块石头,取走最后一块石头的玩家落败。

多人Nim游戏将参赛人数拓展至两个队伍,每支队伍有n名队员交错入座,单次分别能最多取走Mi块石头,取走S块石头中的最后一块的队伍失败,

求第一支队伍是否有必胜策略?

题解:

dp[i][j]表示第i个人取,还有j块石头 。

当j为0的时候,没有石头,这时候是胜,为1。

后继中有必败态的为必胜态。

代码:

31 int dp[30][10010];
32 int n, s, a[30];
33 
34 int solve(int idx, int remain) {
35     if (dp[idx][remain] != -1) return dp[idx][remain];
36     if (remain == 0) return dp[idx][remain] = 1;
37     dp[idx][remain] = 0;
38     rep(i, 1, min(a[idx], remain) + 1) 
39         if (!solve((idx + 1) % (2 * n), remain - i)) 
40             dp[idx][remain] = 1;
41     return dp[idx][remain];
42 }
43 
44 int main() {
45     while (cin >> n, n) {
46         cin >> s;
47         rep(i, 0, 2 * n) cin >> a[i];
48         memset(dp, -1, sizeof(dp));
49         cout << solve(0, s) << endl;
50     }
51     return 0;
52 }

 

以上是关于POJ 2068 Nim的主要内容,如果未能解决你的问题,请参考以下文章

poj2068--Nim

poj2068Nim

POJ 2068 Nim (dp博弈)

poj2960 S-Nim

POJ 3553 Light Switching Game 博弈论 nim积 sg函数

HDU 3404&POJ 3533 Nim积(二维&三维)