[SDOI2009]E&D,洛谷之提高历练地,博弈论(3-6)

正题

      第四题:[SDOI2009]E&D

      这题不是如此的简单,因为它要涉及到找规律和Sg函数。

      首先的,我们可以打一个表来观察之间的关系。

      Sg((x,y))指的是(x,y)的分支状态中,不包含整数集中的最小值。

      打个表观察就可以找规律,大佬大佬(OZY)。然后推一下公式。

      当x==1 && y==1 时  或  x y 都为奇数时,很明显为必败状态(即为0)。

      否则Sg(x,y)=Sg((x+1)/2,(y+1)/2)+1;

      没有啦。

      代码实现挺简单的,但是要注重打表推出关系。

代码<太强了OZY>

#include
#include
#include

int n,m;
int p[1010][1010];

int dfs(int x,int y){
	if(x==1 && y==1) return 0;
	if(p[x][y]!=0) return p[x][y];
	bool tf[1010];
	if(x!=1)
		for(int i=1;i<=x/2;i++)
			tf[dfs(i,x-i)]=true;
	if(y!=1)
		for(int i=1;i<=y/2;i++)
			tf[dfs(i,y-i)]=true;
	for(int i=0;i<=1000;i++)
		if(tf[i]==false){
			p[x][y]=i;
			return i;		
		}
}

int main(){
	scanf("%d %d",&n,&m);
	dfs(n,m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)
			printf("%d ",p[i][j]);
		printf("\n");
	}
}

      

你可能感兴趣的:([SDOI2009]E&D,洛谷之提高历练地,博弈论(3-6))