#include<stdio.h>
#include<string.h>
int n;
int Sg[10005];
int a[110];
int f(int x)
{
if(Sg[x]!=-1) return Sg[x];
int e=0;
bool vis[110]; //写成全局的变量会出错
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
if(x-a[i]>=0)
{
f(x-a[i]);
vis[Sg[x-a[i]]]=1;
}
}
for(int i=0;i<110;i++)
if(!vis[i])
{
e=i;
break;
}
return Sg[x]=e;
}
int main()
{
int t,v,m,x;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&t);
//SG[1]=0;
memset(Sg,-1,sizeof(Sg));
Sg[0]=0;
while(t--)
{
v=0;
scanf("%d",&m);
while(m--)
{
scanf("%d",&x);
v^=f(x);
}
if(!v)
printf("L");
else
printf("W");
}
printf("\n");
}
return 0;
}
poj 2960
最新推荐文章于 2021-03-05 00:02:02 发布
本文介绍了一个基于博弈论的游戏编程实现,通过使用C语言,详细解释了如何构建一个能够计算游戏状态并预测最优策略的程序。文章重点在于递归函数f的设计,该函数用于计算格雷码(Grundy number),并利用动态规划思想避免重复计算。此外,还介绍了如何通过输入不同的游戏参数来模拟游戏过程,并判断游戏结果。
158

被折叠的 条评论
为什么被折叠?



