HDU 1848 博弈 SG值

来源:互联网 发布:淘宝小店怎么加入一淘 编辑:程序博客网 时间:2024/05/16 10:49

博弈网上有篇文章写得特别好

http://blog.csdn.net/zhangxiang0125/article/details/6174639

 

#include<stdio.h>#include<string.h>int a[1000];int sg[1010];void init(){     a[1]=1;     a[2]=2;     for(int i=3;;i++)     {      a[i]=a[i-1]+a[i-2];      if(a[i]>1000)      break;     }}int mex(int x) //记忆化搜索 {    if(sg[x]!=-1)    return sg[x];    bool vis[1010];    memset(vis,0,sizeof(vis));    int i;    for(i=1;i<1000;i++)    {      int tmp=x-a[i];      if(tmp<0)      break;      sg[tmp]=mex(tmp);      vis[sg[tmp]]=1;    }    for(i=0;;i++)    {      if(!vis[i])      {        sg[x]=i;        break;      }    }    return sg[x];}int main(){    int m,n,p;    init();    while(scanf("%d%d%d",&m,&n,&p)==3)    {      if(m==0&&n==0&&p==0)      break;      memset(sg,-1,sizeof(sg));      if((mex(m)^mex(n)^mex(p))==0)      printf("Nacci\n");      else      printf("Fibo\n");    }    return 0;}


 

原创粉丝点击