组合游戏
_pkm_
love coding
展开
-
博弈论
上一期的文章里我们仔细研究了Nim游戏,并且了解了找出必胜策略的方法。但如果把Nim的规则略加改变,你还能很快找出必胜策略吗?比如说:有n堆石子,每次可以从第1堆石子里取1颗、2颗或3颗,可以从第2堆石子里取奇数颗,可以从第3堆及以后石子里取任意颗……这时看上去问题复杂了很多,但相信你如果掌握了本节的内容,类似的千变万化的问题都是不成问题的。 现在我们来研究一个看上去似乎更为一般的游戏:给定一个有转载 2016-07-21 20:14:20 · 438 阅读 · 0 评论 -
HDU 5785 A Simple Nim(组合游戏,sg函数)
题目链接是hiho的一道姊妹题目。知道了sg定理,及其函数的计算方式后,对于本题目。每次有2个操作, A) 要么分堆,对于状态k,分为3堆,i,j,k-i-j(i,j>0),那么状态的转移就是所有的可能分堆情况 B) 不分堆,就是普通的NIM游戏,那么状态k,可以转移到0到k-1的状态综上,sg[k]=mex{sg[0],sg[i],sg[i] xor sg[j] xor sg[k-i-j] |原创 2016-08-05 17:56:37 · 419 阅读 · 0 评论 -
Codeforces Round #366 (Div. 2) B. Spider Man (组合游戏)
题目链接有一个2个人玩的游戏,有n个圆环,每次的操作是选择一个大小不小于2的圆环,把它分成x,N-x(1<=x#include<bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #define LL long long #define pb push_back #define gcd __gcd#def原创 2016-08-08 07:13:39 · 423 阅读 · 5 评论 -
HDU5724(组合游戏,博弈论)
题目链接 先学习一波算法,找到一篇很好的博文,here 按照里面的理论,就可以做了 SG定理,以及2个关于必胜,必败状态的定理 找SG值,一般是 找规律,打表,递推,动态规划等方法 本题按照定理,递推出就可以了#include<bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #define原创 2016-07-21 20:10:19 · 376 阅读 · 0 评论