![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
博弈
acraz
这个作者很懒,什么都没留下…
展开
-
博弈之Nim游戏
Nim游戏规则: 两个人甲和乙的取石子游戏,共有N堆不同的石子,编号1..N,第i堆中有a[i]个石子。 每一次行动,甲和乙可以选择从一堆石子中取出任意数量的石子。至少取1个,至多取完。 两人轮流行动,取走最后一个石子的人获得胜利(当某人不能取时失败)。 问,两人均取最优策略,谁会胜利?? 介绍一下博弈中两个概念: P-position:当前局面为先手必败局面。 N-position原创 2015-08-17 19:31:44 · 334 阅读 · 0 评论 -
HDU 1848 Fibonacci again and again(SG函数)
题意:有三堆石子,两人轮流取,每次只能取斐波那契数列个石子,求胜方。 简单的SG函数求解,设一堆石子有x个,并定义为局面x,那么局面x的后继局面y为 x-F[i](i=1,2,...),其中F[i]表示斐波那契数列。 然后求解SG函数就成了。 最后SG(tol)=SG(n) xor SG(m) xor SG(p) 其中tol表示整个三堆石子m,n,p的局面。 #pragma warning原创 2015-08-17 20:32:39 · 292 阅读 · 0 评论 -
HDU 1847 Good Luck in CET-4 Everybody!(SG函数)
其实这道题跟HDU 1848一模一样的。。 代码改改就能AC了 #pragma warning(disable:4996) #include #include using namespace std; const int N = 1000; int pow2[11], SG[1001]; bool vis[N]; void getSG(){ SG[0] = 0; for (int原创 2015-08-17 21:58:41 · 221 阅读 · 0 评论 -
HDU 2149 Public Sale&&HDU 2188(巴什博弈)
我只想说今晚做了两道巴什博弈的题,全用SG函数解的。脑洞真大。。。。 先简单说一下巴什博弈吧,一共有n块石头,两个人轮流取,每次至少取1块,至多取m块,问先手胜负情况。 思路:n=(m+1)*r+s,若s不为0,则先手必胜,取法为,先手先取s,然后每次第二个人取x块之后,先手取m+1-x块。 若s=0,则先手必败,第二个人取法同上。 其实两个题目是一样的。 先贴2149的原创 2015-08-17 23:11:32 · 354 阅读 · 0 评论 -
HDU 2147kiki's game(SG函数,找规律)
本来呢觉得求出来SG函数后很简单的,但是呢,MLE无数次之后发现脑洞开的有点大了。 看了一下SG表,找到了规律:当n和m同为奇数时先手必败。 还是简单在这里提一下怎么打一张SG表就可以求出所有的n,m组合。 题意就是让你从右上角移动到左下角,棋盘大小为n*m,那么肯定有SG[n][1]=0 然后不断向右上角拓展就成了直到2000,对于给定的n,m,我们访问SG[2001-n][m]就可以了原创 2015-08-17 21:44:00 · 428 阅读 · 5 评论