博弈——Nim&SG函数函数(hdu1848)
2016-11-19 14:27
169 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1848
*如对Nim博弈不是很理解的请移步上篇博客http://blog.csdn.net/sm9sun/article/details/53229631
题目描述:
Fibonacci取石子
1、 这是一个二人游戏;
2、 一共有3堆石子,数量分别是m, n, p个;
3、 两人轮流走;
4、 每走一步可以选择任意一堆石子,然后取走f个;
5、 f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8…等数量);
6、 最先取光所有石子的人为胜者;
也就是说在Nim博弈的基础上,对取石子的个数加以限制。这里我们引入一个SG函数的概念
SG函数的百科说明:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。
看起来有点抽象。实际上的意思就是 假如一个x,其f(x)=k,那么x的下一步操作,就是后继 可以满足0<=f(x->next)<k,当然其后继不可能等于k。
这就等同于Nim博弈里把k个石子变成0,1……k-1是一个道理
所以将这n枚棋子所在的顶点的SG值看作其n堆相应数量的石子,那么这个Nim游戏的每个必胜策略都对应于原来这n枚棋子的必胜策略
即又回到了Nim博弈
题目描述:先抛一个取石子问题:
http://acm.hdu.edu.cn/showproblem.php?pid=1848
*如对Nim博弈不是很理解的请移步上篇博客http://blog.csdn.net/sm9sun/article/details/53229631
题目描述:
Fibonacci取石子
1、 这是一个二人游戏;
2、 一共有3堆石子,数量分别是m, n, p个;
3、 两人轮流走;
4、 每走一步可以选择任意一堆石子,然后取走f个;
5、 f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8…等数量);
6、 最先取光所有石子的人为胜者;
也就是说在Nim博弈的基础上,对取石子的个数加以限制。这里我们引入一个SG函数的概念
SG函数的百科说明:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。
看起来有点抽象。实际上的意思就是 假如一个x,其f(x)=k,那么x的下一步操作,就是后继 可以满足0<=f(x->next)<k,当然其后继不可能等于k。
这就等同于Nim博弈里把k个石子变成0,1……k-1是一个道理
所以将这n枚棋子所在的顶点的SG值看作其n堆相应数量的石子,那么这个Nim游戏的每个必胜策略都对应于原来这n枚棋子的必胜策略
即又回到了Nim博弈
#include<stdio.h> int f[16]={1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597}; //懒的写fib函数了= =!!! int SG[1005]={0}; int E[1005]; void f_sg() { int i,j; int h[20]; E[0]=0;E[1]=1; for(i=2;i<=1000;i++) { for(j=0;j<=15;j++) { h[j]=0; } for(j=0;f[j]<=i;j++) //SG值状态标记 { h[E[i-f[j]]]=1; } for(j=0;j<=15;j++) if(h[j]==0) //最小SG值 { E[i]=j; break; } } } int main() { int m,n,p,x; f_sg(); while(~scanf("%d%d%d",&m,&n,&p),(m||n||p)) { x=E[m]^E ^E[p]; if(x) printf("Fibo\n"); else printf("Nacci\n"); } return 0; }
题目描述:先抛一个取石子问题:
相关文章推荐
- hdu 1907 && hdu 2509(Nim博弈)
- 博弈入门必备知识&&入门题 hdu1846 HDU1847 HDU1527 hdu2516 HDU1849 HDU1848 HDU1907
- HDU 1536 && HDU 1944 S-Nim (Nim博弈、SG函数模板)
- HDU1907 && HDU2509_Nim博弈变形
- hdu 2509 Be the Winner(博弈Nim)
- POJ2975 & ZOJ3067 Nim [基础Nim博弈]输出方法
- ACM学习历程—HDU 3915 Game(Nim博弈 && xor高斯消元)
- Hdu 1907 && Hdu2509 (nim博弈的相反胜况)
- 斐波那契博弈(Fibonacci&nbsp;Nim)
- HDU 2509 Be the Winner && HDU 1907 John (Nim博弈变形)
- 博弈入门—NIM&SG
- BZOJ:2819 NIM(树链剖分||DFS序 &&NIM博弈)
- [ZOJ3591] Nim && 博弈+计数
- 博弈之 Nim 游戏&poj 3537 Crosses and Crosses
- hdu1536 & 1944 S-NIM 博弈 SG函数
- HDOJ 题目1566&题目1544 S-Nim(sg博弈模板)
- 【HDU3032】【Lasker's Nim(一种Nim游戏)】Nim or not Nim? Multi-SG博弈、打表
- 博弈论 (Nim 博弈)—— HDU 1907 && HDU 2509
- hdu 1907 John&& hdu 2509 Be the Winner(基础nim博弈)
- 蓝桥杯T37(nim博弈)