博弈笔记(占坑)

博弈笔记

Bash 博弈

简单说的话,经典的说法是:有一堆石子,总计数为 N,两个人轮流取石子,最多每人次取 K个,最少也要拿一个,规则是取得最后一个石子的人是赢家,现在告诉问最后谁是赢家。
这个问题呢,要这么去想,
1. 假设现在 N = K + 1,那么因为一次最多最多拿走 K 个,所以肯定是后手赢得比赛。
2. 假设现在 N = (K + 1) * P + S,也就是现在的石子数目是K+1的倍数,加一个余数的形式(余数可能为0,此时后手取胜),那么只要保证两个人每一个回合加起来取得石子数目是K + 1,也就是始终可以写成是K + 1的倍数,则最后总是先手的。
3. 总结一下就是,只要给对手留下的是 K + 1 的倍数,自己就可以获胜。因为只要给对手的是 K + 1 的整数倍,那么就可以维护住这个态势,最后一个石子留给自己

必胜态:只要 N 无法整除 K + 1 ,就是先手获胜,否则后手获胜。

简单套路https://vjudge.net/problem/HDU-1846
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1066

威佐夫博奕

威佐夫博奕是这样的,有两堆各若干的物品,两个人轮流从某一堆或者同时从两堆中间取出同样多的物品,规定每一次最少在一堆中取一个,不设上限,最后取光着判胜。

这个题目呢,要这么去分析,
首先我们用数对的方式来表示当前的两堆物品的数量分布,如果是某一方得到(0,0)的分布,则判负,我们可以得到,前几个判负分布分别是:(0,0) 、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)……
这样来的话,我们可以知道,如果a, b写成通项的话,有这么一个事情,就是如果我假设a0 和b0 的首项是0的话, ak这一项是没有在前面出现的最小项,而bk 就是ak + k;

必胜态 : 如果满足 ak=k∗(1+√5)/2,bk=ak+k ,后手必胜,否则前手必胜。

例题https://vjudge.net/problem/HDU-1527

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值