博弈小结

最近刷了几道比较水的博弈题,对于博弈题多少有点感觉了,先总结一下,等填完其他坑,再刷下 sg 函数,到时候再来补充。


博弈基本知识的介绍
http://blog.csdn.net/lionel_d/article/details/43939605#comments


poj 1067 取石子游戏
裸威佐夫博弈
poj 1740 A New Stone Game
深入体会博弈中的制造对称状态
http://blog.csdn.net/yukizzz/article/details/52073702
poj 1704 Georgia and Bob
将问题等价转换为nim游戏
http://blog.csdn.net/yukizzz/article/details/50978539
poj 1082 Calendar Game
这题我是比较无脑的直接通过必胜态和必败态的关系从终态向前推,

  1. 所有终结点是必败点。
  2. 从任何必胜点操作,至少有一种方式可以进入必败点。
  3. 无论如何操作,必败点都只能进入必胜点。

不过貌似一天一天的观察可以发现一定奇偶性。
poj 2311 Cutting Game
很有意思的一道题,深入理解公平组合游戏终态的选择。
http://blog.csdn.net/yukizzz/article/details/52076075
hdu 1525 Euclid’s Game
寻找必败态和必胜态之间的规律,分类讨论,挺有意思的。
http://blog.csdn.net/yukizzz/article/details/51014016
hdu 1564 Play a game
棋盘问题可以转化 x,y 轴上的巴什博弈。
hdu 1846 Brave Game
巴什博弈裸题
hdu 1847 Good Luck in CET-4 Everybody!
n 最大只有1000,直接上 sg 函数
hdu 2416 取石子游戏
这题想的也是有点久,一直没思路,查了题解,这是一道非常裸的斐波那契博弈
斐波那契博弈主要是利用:
1. 相邻的两个斐波那契数 f[i]<2f[i1]
2. 不相邻的两个斐波那契数 f[i]>2f[j]
3. Zeckendorf定理:任何正整数可以表示为若干个不连续的Fibonacci数之和。
hdu 2897 邂逅明下
巴什博弈的变形,还是利用巴什博弈的思想,此时先手总是能构造出 (p+q) ,然后在最后一次少拿一些,给后手留点。后手输。
但如果 n%(p+q)=x(xp) 个,此时后手便配合先手构造出 p+q ,使得先手不得不最后一次拿完 x 个。先手输。
如果p<x<q,先手会在每一组 (p+q) 中尽量使得自己先拿,就能保证最后时由后手拿完 x 。后手输。
hdu 3032 Nim or not Nim
打表找规律
hdu 3383 Game
观察性质,转化为阶梯博弈
http://blog.csdn.net/yukizzz/article/details/52080768
hdu 3537 Daizhenyang’s Coin
经典翻硬币游戏
https://yukizzz.github.io/2016/08/17/HDU-3537-Daizhenyang-s-Coin%E3%80%90%E7%BF%BB%E7%A1%AC%E5%B8%81%E6%B8%B8%E6%88%8F%E3%80%91/#more
hdu 3863 No Gambling
完全对称的图,自己手动模拟一下就会发现后手根本堵不住。
hdu 3951 Coin Game
寻找对称状态, 先手拿完一定数量之和,后手总是可以在中间位置根据链长的奇偶性取走一或者两枚硬币,把所有硬币分成两个长度相同的链。这样面对对称状态,后手不断模仿先手即可。后手胜。
注意如果一次只能拿一个,并且硬币数为奇数时,先手胜。
hdu 2188 悼念512汶川大地震遇难同胞――选拔志愿者
裸巴什博弈
hdu 2149 Public Sale
依然裸巴什博弈,假设n%(m+1)=x,只要先手把余数 x 先取完,此时后手变为先手,面对((nx)|(m+1)的新状态,后手必输。
hdu 1850 Being a Good Boy in Spring Festival
裸nim游戏,保证先手拿完之后剩下的nim和为0即可。
hdu 2176 取(m堆)石子游戏
跟上一题一个套路
hdu 1527 取石子游戏
裸威佐夫博弈
hdu 2177 取(2堆)石子游戏
挺有意思的一道题,威佐夫博弈,其实就是如何将当前状态转变为奇异状态,在公式的基础上解方程即可。
soj 1866 Games
动态规划计算必胜态必败态,注意这题跟多校那道博弈一样,有平局的状态,也就是会有“自杀”的情况,这样加个 flag 递推时标记一下即可。
注意平局的判定优先级最高,即if(flag[i - a[j]]) continue;
如果平局则不考虑这个状态对输赢结果的影响。


未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值