HDU1847

首先0的时候肯定是先手必败态,而必败态一定可以转化为必胜态,所以对于还剩i个的时候。找到他的后继状态是否有必败态,有一个它就是必胜态,没有一个就是必败态。

#include
#include
#define maxl 1010

int n;
int a[maxl],ans[maxl];
bool ok[maxl];

void prework()
{
	ans[0]=0;
	for(int i=1;i<=10;i++)
		a[i]=1<<(i-1);
	for(int i=1;i<=1000;i++)
		for(int j=1;j<=10;j++)
		if(a[j]<=i)
			ans[i]|=!ans[i-a[j]];
}

int main()
{
	prework();
	while(~scanf("%d",&n))
	{
		if(ans[n])
			printf("Kiki\n");
		else
			printf("Cici\n");
	}
	return 0;
}


你可能感兴趣的:(博弈论,博弈论)