您的位置:首页 > 大数据 > 人工智能

HDU 1848 Fibonacci again and again

2012-02-24 12:41 555 查看
HDU_1848

用记忆化搜索的方式处理出sg函数值,然后看sg
^sg[m]^sg[p]是否为0即可,推荐一个讲SG函数入门知识的博客:http://www.cnblogs.com/Knuth/archive/2009/09/05/1561007.html

#include<stdio.h>
#include<string.h>
#define MAXD 1010
int f[20], h[MAXD][20], sg[MAXD];
void prepare()
{
int i;
f[0] = f[1] = 1;
for(i = 2; i <= 15; i ++)
f[i] = f[i - 1] + f[i - 2];
memset(h, 0, sizeof(h));
memset(sg, -1, sizeof(sg));
}
int dfs(int n)
{
int i;
if(sg
!= -1)
return sg
;
for(i = 1; i <= 15; i ++)
if(n - f[i] >= 0)
h
[dfs(n - f[i])] = 1;
for(i = 0; h
[i]; i ++);
return sg
= i;
}
int main()
{
prepare();
for(;;)
{
int m, n, p;
scanf("%d%d%d", &m, &n, &p);
if(!m && !n && !p)
break;
printf("%s\n", (dfs(m) ^ dfs(n) ^ dfs(p)) == 0 ? "Nacci" : "Fibo");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: