HDU 1536 S-Nim(博弈论)

本文提供了一个SG函数的模板实现,该函数用于计算博弈论中无后效性原理下的SG值,帮助判断游戏状态的胜负。文章通过具体代码展示了递归求解SG值的过程,并包含了输入输出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SG函数模版,学习ing...

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 int dp[10001],n;
 7 int p[101];
 8 int sg(int x)
 9 {
10     int i;
11     int flag[101];
12     memset(flag,0,sizeof(flag));
13     if(dp[x] != -1)
14     return dp[x];
15     if(x < p[0])
16     return dp[x] = 0;
17     for(i = 0;i < n&&x >= p[i];i ++)
18     {
19         if(dp[x-p[i]] == -1)
20         {
21             dp[x-p[i]] = sg(x-p[i]);
22         }
23         flag[dp[x-p[i]]] = 1;
24     }
25     for(i = 0;;i ++)
26     if(!flag[i])
27     return dp[x] = i;
28 }
29 int main()
30 {
31     int m,i,j,k,temp,ans;
32     while(scanf("%d",&n)!=EOF)
33     {
34         memset(dp,-1,sizeof(dp));
35         dp[0] = 0;
36         if(n == 0) break;
37         for(i = 0;i < n;i ++)
38         scanf("%d",&p[i]);
39         sort(p,p+n);
40         scanf("%d",&k);
41         for(i = 1;i <= k;i ++)
42         {
43             scanf("%d",&m);
44             ans = 0;
45             for(j = 0;j < m;j ++)
46             {
47                 scanf("%d",&temp);
48                 ans ^= sg(temp);
49             }
50             if(ans == 0)
51             printf("L");
52             else
53             printf("W");
54         }
55         printf("\n");
56     }
57     return 0;
58 }

 

 

 

转载于:https://www.cnblogs.com/naix-x/archive/2013/05/28/3103118.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值