HDU 1848 斐波那契博弈

Posted edviv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1848 斐波那契博弈相关的知识,希望对你有一定的参考价值。

 

斐波那契数列数列博弈:给你三堆石子,每次只能取费波契数列个石子,问先手赢输出“Fibo”,否则输出“Nacci”。

主要求出SG函数,然后看 异或值 ,最后根据异或值是否是 0 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int f[20];
int sg[1050], mex[1050];
int main()
{
    int m,n,p;
    for(int i = 0; i <= 15; i++) //递推求斐波那契数列
        if(i == 0 || i ==1)
            f[i] = 1;
        else
            f[i] = f[i-1] + f[i-2];

    for(int i = 1; i <= 1000; i++)  //从小到大递推每个状态
    {
        memset(mex,0,sizeof(mex));  // 清空 mex
        for(int j = 1; j <= 15; j++)
            if(i >= f[j])   //石子数大于等于取的石子数,把后继的 放入 mex中
                mex[sg[i-f[j]]] = 1;
        for(int j = 0; j <= 1000; j++)  //求出该状态下 sg值
            if(!mex[j])
            {
                sg[i] = j;
                break;
            }
    }

    while(~scanf("%d%d%d",&m,&n,&p))
    {
        if(!m && !n && !p) return 0;
        if(!(sg[m]^sg[n]^sg[p])) puts("Nacci");
        else puts("Fibo");

    }
    return 0;
}

  

以上是关于HDU 1848 斐波那契博弈的主要内容,如果未能解决你的问题,请参考以下文章

(HDU - 1527)取石子游戏(斐波那契博弈)

(HDU - 2516)取石子游戏(斐波那契博弈)

HDU1848Fibonacci again and again(博弈论)

HDU 2516 取石子游戏(简单博弈)(斐波那契博弈)

博弈论入门之斐波那契博弈

HDU 1848 SG函数博弈