博弈---ZOJ 3057 Beans Game(DP博弈)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3057

有豆类三个桩。TT和DD挑选任意数量的豆子从任何两堆轮流任何桩或相同的数字。谁拿到最后一个Bean将获胜。TT和DD是很聪明的。


#include<stdio.h>  

#define N 300+4
bool dp[N][N][N]={0};//用bool比int省空间
void Init(){
	int i,j,k,t;
for(i=0;i<N;i++)
	for(j=0;j<N;j++)
		for(k=0;k<N;k++)
			if(dp[i][j][k]==0)//当前位于必败态,前一步为必胜态,取的方法如下
			{
				for(t=1;t+k<N;t++) //t从1开始
					dp[i][j][k+t]=1;
				for(t=1;t+j<N;t++)
					dp[i][j+t][k]=1;
				for(t=1;t+i<N;t++)
					dp[i+t][j][k]=1;
				for(t=1;t+i<N&&t+j<N;t++)
					dp[t+i][t+j][k]=1;
				for(t=1;t+j<N&&t+k<N;t++)
					dp[i][t+j][t+k]=1;
				for(t=1;t+i<N&&t+k<N;t++)
					dp[t+i][j][t+k]=1;
			}

}
int main()
{
	Init();
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)!=EOF){
printf("%d
",dp[a][b][c]);
}
return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

today lazy . tomorrow die .
原文地址:https://www.cnblogs.com/france/p/4808768.html