C++:博弈(威佐夫博奕)(学不会来找我)

算法:博弈论(C/C++) 博弈论是数学的一个分支,研究在冲突和合作的情况下,多个决策者如何做出最佳决策。在计算机科学中,博弈论广泛应用于人工智能、经济学、政治学等领域,特别是在决策制定和策略优化方面。博弈树是一种用于表示博弈中所有可能状态的树形结构。每个节点代表一个状态,边代表参与者的决策。通过以上示例,我们展示了博弈论的基本概念及其在实际问题中的应用,包括使用动态规划判断先手玩家的胜利可能性和通过 Minimax 算法在博弈树中寻找最优策略。这些方法在游戏 AI 和决策制定中有着广泛的应用。 阅读详情

前言

有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等
均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间
很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们
来分析一下要如何才能够取胜。

首先,一道例题:

例题

【博弈】取石子游戏
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两 堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还 是败者。

输入输出格式:

输入格式:

输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。

输出格式:

输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。

输入输出样例

输入样例#1:

2 1
8 4
4 7

输出样例#1:

0
1
0

这题需要用到威佐夫博奕,大家一起来看看吧。

威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。(统计小规模数据)可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而 bk= ak + k。(发现规律,得到猜想。)奇异局势有如下三条性质:

  1. 任何自然数都包含在一个且仅有一个奇异局势中。
    由于 ak是未在前面出现过的最小自然数,所以只需证明 bk 不会出现在前面的奇异局势中即可。
    由于 ak > ak-1 ,而 bk= ak + k > ak-1 + k-1 = bk-1 > ak-1 。
    所以性质 1 成立。(从第 0 项到第 k 项,ak是递增的;由于 bk=ak+k,所以 bk也是递增的。)
  2. 任意操作都可将奇异局势变为非奇异局势。
    事实上,若只改变奇异局势(ak,bk)的某一个分量,那么另一个分量不可能在其他奇异局势中(性质 1),所以必然是非奇异局势。如果使(ak,bk)的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差(因为 k 是递增的,所以每个奇异局势对应唯一一个差),因此也是非奇异局势。
  3. 采用适当的方法,可以将非奇异局势变为奇异局势。
    假设面对的局势是(a,b)(设 a≤b,否则先交换 a 和 b),若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);如果 a = ak ,b > bk,那么,取走 b – bk个物体,即变为奇异局势;如果 a = ak ,b < bk,则同时从两堆中拿走 ak – ab – ak个物体,变为奇异局势(ab – ak,ab – ak+ b – ak);如果 a > ak ,b= ak + k,则从第一堆中拿走多余的数量 a – ak 即可;如果 a < ak ,b= ak + k,分两种情况,第一种,a=aj (j < k),从第二堆里面拿走 b –bj 即可;第二种,a=bj (j < k),从第二堆里面拿走 b – aj 即可。从如上性质可知,两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者取胜。那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式:
    ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,…,n 方括号表示取整函数)
    奇妙的是其中出现了黄金分割数(1+√5)/2 = 1.618…,因此,由 ak、bk组成的矩形近似为黄金矩形,由于 2/(1+√5)=(√5-1)/2,可以先求出 j=[a(√5-1)/2],若 a=[j(1+√5)/2],那么 a = aj,bj = aj + j,若不等于,
    那么a = aj+1,bj+1 = aj+1+ j + 1,若都不是,那么就不是奇异局势。然后再按照上述法则进行,一定会遇到奇异局势。
    PS:也可以这样判定:给定(a,b)(a<b),是不是奇异局势呢?先算出 k = b – a,然后根据 k 算出 ak和 bk,如果 ak=a 并且 bk=b,那就是奇异局势,否则就不是。

那这题就很简单了,看看代码吧。

AC代码

#include<bits/stdc++.h>
using namespace std;
double a,b;
int main(){
	while(cin>>a>>b){
		if(a>b) swap(a,b);
		double s=b-a;
		if(int(s*1.618)==a){
			cout<<0<<endl;
		}else cout<<1<<endl;
	}
	return 0;
} 
C++中的博弈问题 C++中的博弈问题 本文仅讨论符合以下条件的博弈问题 1、当前状态不是先手必胜态就是先手必败态。 2、若当前状态存在一种转化为先手必败态的方式,则当前状态为先手必胜态。 3、若当前状态不存在一种转化为先手必败态的方式,则当前状态为先手必败态。 那么一般的博弈问题,失败条件是已知的,而失败状态就为一种先手必败态。当你知道先手必败态,就可以跟上述3大规则来把跟博弈中的所有状态表示出来。 圆圈表示状态 ... 阅读详情

相关推荐

博弈论——巴什博弈(C++)

有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。

小天狼星_布莱克 的博客 1845

博弈论(初级)——数学知识(C++)

转载说明 Wolfycz 以上是原文链接,请大家支持原创。 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 博弈 博弈==,具体的例子就是下棋,双方都考虑最有利于自已的步骤,但是最终必有一方输,一方赢。 博弈的策略:参与者在行动之前所准备好的一套完整的行动方案,就是想好下完这步棋,对方会如何下,以及接下来该如何下,最终得出结果。 常见的博弈有以下: 1.博弈:合作博弈和非合作博弈 合作博弈:指参与者能够达成一种具有约束力的协议,在协议范围内选择有利于双方的策略 非合作博弈:指参与者.

Annabel_CM的博客 5676

博弈论,博弈论66个经典例子,C,C++

博弈论相关,一些matlab练习的例程,希望能有点参考价值。

C++ 数论相关题目 博弈论:拆分-Nim游戏

C++ 数论相关题目 博弈论:拆分-Nim游戏

fucheng的博客 997

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

安卓app逆向破解脱壳教程

From:Hook 神器家族的 Frida 工具使用详解:https://blog.youkuaiyun.com/FlyPigYe/article/details/90258758 详解 Hook 框架 frida (信抢红包):https://www.freebuf.com/company-information/180480.html APP逆向神器之Frida【Android初级篇】:https://www.jianshu.com/p/2d755beb1c54 frida 官网文档:https://fr..

sinat_28371057的博客 2万+

博弈论基础知识: 巴什博奕+斐波那契博弈+威佐夫博奕+尼姆博弈(及Staircase)

博弈论基础知识: 巴什博奕+斐波那契博弈+威佐夫博奕+尼姆博弈(及Staircase) 转载自: http://tieba.baidu.com/p/1474319443 http://blog.sina.com.cn/s/blog_6842b59101017sx7.html https://www.cnblogs.com/kls123/p/6970414.html (一)巴什博奕(Bash Gam...

画船听雨眠 744

LT码与Raptor码的性能仿真

从数据分析看来,在数据块大小较小时(100 - 200 左右 ),LT 码和 Raptor 码的平均冗余符号数量差距相对较小,但 LT 码的冗余符号数量始终高于 Raptor 码。现在采用MATLAB进行仿真,直观展示不同数据块大小下,两种解码方式的解码时间差异.如图4.1所示,LT解码(绿色圆点折线)LT 解码方式的解码时间随数据块大小的变化情况。从实际应用的角度来看,LT码由于其简单的编码机制,适用于资源受限或对编码效率要求较高的场景,但其较高的解码复杂度限制了其在一些实时性要求较高的应用中的使用。

道亦无名 1137

威佐夫博弈详解

那么第一种想到必败的情况,肯定是(0,0)了。这时,后手只需在第二堆石子中取四个石子,局面变为(2,1),上文已经推理过了,先手必败。这时,后手只需在第二堆石子中取三个石子,局面变为(1,2),上文已经推理过了,先手必败。这时,后手只需在第二堆石子中取六个石子,局面变为(2,1),上文已经推理过了,先手必败。这时,后手只需在第二堆石子中取五个石子,局面变为(1,2),上文已经推理过了,先手必败。这时,后手只需在第一堆石子中取两个石子,局面变为(2,1),上文已经推理过了,先手必败。

Taunting_Wind 1146

Python实战:用Py2neo轻松玩转Neo4j图数据库(附完整CRUD示例)

本文通过构建武侠知识图谱的实战案例,详细介绍了如何使用Python的Py2neo库对Neo4j图数据库进行CRUD操作。内容涵盖环境搭建、节点与关系创建、Cypher查询、数据更新删除及事务管理,帮助开发者直观高效地处理复杂关联数据,实现从入门到进阶的完整交互流程。

weixin_29034963的博客 185

Java云上香云祭祀线上祭祀系统小程序源码

云上香云祭祀线上祭祀系统”,不仅是一种祭祀方式的创新,更是对传统文化的一次深情致敬。它让我们明白,无论时代如何变迁,对亲人的怀念与尊重永远不会改变。在这个特别的平台上,让我们共同守护那份跨越时空的爱与思念,让心灵得以安放,让生命之树常青。🌳。

2401_84413757的博客 804

巴什博弈+威佐夫博弈

1、巴什博弈(Bash Game) 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。 最后取光者胜 若n%(m+1)==0,后手必胜,反之,先手必胜。 最后取光着输 当m=(m+1)*k +1时 ,后手必胜,否则先手必胜。 ...

m0_51344983的博客 1653

补丁1.0:使用Eviews做ADF检验

补丁1.0:使用Eviews做ADF检验

Jet4505的博客 1961

威佐夫博弈算法C++

在看本文章之前给大家说几句 如果你是先看了百度上的解释或者是其他文章,觉得很是繁琐,无法理解。 那么恭喜你,看本文会轻松很多。这里没有讲解原理之类的,只是结果。当你理解了之后,有兴趣的话就可以继续去钻研原理了。到时候会很轻松的。 当然我说的本文会轻松,但并不是说,跟1+1一样那么简单。还是需要你坚持一会。一会就可以明白的。加油 威佐夫博弈(Wythoff’s game)是指的这样一个问题:有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最

weixin_44413364的博客 678

XYC Q8开源掌机刷第三方系统教程

分区结束后直接将各种游戏文件放入OD分区的Roms文件夹下

m0_60352504的博客 4569

《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

欢迎大家订阅《Autosar从入门到精通-实战篇》,下方整理了相关博文的目录(单击蓝色字体即可跳转),方便大家获取。 本专栏旨在:扫除Autosar工具链配置过程中的障碍,加深对Autosar理论的理解。 温馨提醒: 如有疑问,可在博文的“评论区”给小编留言,进行技术交流(评论区开启了验证功能,审核通过后,会显示); 如有疑问,也可以通过博文中的第一个图片联系小编,获取专栏/博文的实时状态; 由于工作限制,仅做个人技术交流。添加好友时,请备注您的“姓名-公司-职务...

「汽车电子助手」的博客 12万+

python博弈论_博弈论 威佐夫博奕呜

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。Input输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目...

weixin_39775127的博客 562

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

hdu 1527 升级 2177(威佐夫博奕)

理论:(来自:http://www.wutianqi.com/?p=1081) 威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同 时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。     这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示 两堆物品的数

2752

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

威佐夫博弈

威佐夫博奕 如有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、

EmilSinclair4391的博客 407

巴氏(bash)威佐夫(Wythoff)尼姆(Nim)博弈之模板

转自:http://colorfulshark.cn/wordpress/巴氏(bash)威佐夫(wythoff)尼姆(nim)博弈之模板-823.html 最近研究了一下博弈论(听起来很高大上),当然,这只是博弈论中的冰山一角,但不可否认,巴氏(bash)博弈,威佐夫(Wythoff)博弈和尼姆(Nim)博弈这三种在ACM比赛中也是相当重要的,而最大的问题就是,博弈理解起来有较大的难度,即使理

AC_Dreameng 3242

博弈入门(巴什博弈、斐波那契博弈、威佐夫博奕)

什么是博弈?博弈论(Game Theory),博弈论是指研究多个个体或团队之间在特定条件制约下的对局中利用相关方的策略,而实施对应策略的学科。有时也称为对策论,或者赛局理论,是研究具有斗争或竞争性质现象的理论和方法,它是应用数学的一个分支,既是现代数学的一个新分支,也是运筹学的一个重要学科。目前在生物学、经济学、国际关系学、计算机科学、政治学、军事战略和其他很多学科都有广泛的应用。主要研究公式化了的

一个小孩的自我踌躇 969

博弈论(巴什博弈,威佐夫博弈,尼姆博弈,附有模板及题目)

一、巴什博弈 描述:n个数,一次最多报m个,最后取光的人获胜 结论:当n为m+1的倍数时,后手必胜,其它情况均是先手必胜 模板题及模板: A题 hdu 1846 Brave Game #include <bits/stdc++.h> using namespace std; int t,m,n; int main() { ios::sync_with_stdio(false...

zhoucheng_123的博客 749

博弈论 威佐夫博奕呜

R - 取石子游戏 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。 Output 输出对应也有若干行,每行包

Duihanhan的博客 314

高精度威佐夫博弈

链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1185 本来威佐夫博弈只用a*(sqrt(5)+1)/2就行了,可这题精度太高,必须将0.618的精度再扩大很多倍 #include <iostream> #include <cstdio> #include <cstring> #inc...

dukig的博客 226

博弈模板

一.  巴什博奕(Bash Game):   A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。 其实如果知道原理,这游戏一点运气成分都没有,只和先手后手有关,比如第一次报数,A报k个数,那么B报5-k个数,那么B报数之后问题就变为,A和B一块报数,看谁先报到25了,进而变为20,15,10,5,当到5的时候,不管A怎么报数,最后一个数肯

狮子淡泊名利 1467

POJ 取石子游戏 (威佐夫博弈)

题目链接:https://vjudge.net/contest/363960#problem/H 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 In...

zaiyang遇见 404
上一篇: C++:博弈(巴什博奕)(学不会来找我)
下一篇: C++:博弈(尼姆博奕)(学不会来找我)
GG_Bond...
博客等级 码龄5年 531粉丝 64原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值