zoukankan      html  css  js  c++  java
  • 【博弈论】【SG函数】hdu1848 Fibonacci again and again

    某个状态的SG函数被定义为 除该状态能一步转移到的状态的SG值以外的最小非负整数。

    有如下性质:从SG值为x的状态出发,可以转移到SG值为0,1,...,x-1的状态。

    不论SG值增加与否,我们都可以将当前所有子游戏的SG值异或起来从而判断胜负状态。

    常采用记忆化搜索来计算SG函数。

    #include<cstdio>
    #include<set>
    #include<cstring>
    using namespace std;
    int fib[1001],a[3],SG[1001],m;
    int sg(int x)
    {
    	if(SG[x]!=-1) return SG[x];
    	set<int>S;
    	for(int i=1;i<=m;++i)
    	  {
    	  	if(fib[i]>x) break;
    	    S.insert(sg(x-fib[i]));
    	  }
    	for(int i=0;;++i)
    	  if(S.find(i)==S.end())
    	    return SG[x]=i;
    }
    int main()
    {
    	fib[1]=fib[2]=1;
    	for(m=2;fib[m+1]<=1000;++m)
    	  fib[m+1]=fib[m]+fib[m-1];
    	memset(SG,-1,sizeof(SG));
    	while(1)
    	  {
    	  	scanf("%d%d%d",&a[0],&a[1],&a[2]);
    	  	if((!a[0])&&(!a[1])&&(!a[2]))
    	  	  break;
    	  	puts((sg(a[0])^sg(a[1])^sg(a[2]))?"Fibo":"Nacci");
    	  }
    	return 0;
    }
  • 相关阅读:
    java变量类型
    java基本数据类型
    java对象和类
    java认识
    vue-随笔-transition
    vue-随笔-class-style
    vue-随笔-form-elements
    Constructing Roads*
    hdu3371 Connect the Cities
    hdu1879浙大计算机研究生复试上机(2008)继续畅通工程
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4335929.html
Copyright © 2011-2022 走看看