实用算法实践-第 31 篇 博弈游戏

Ch5. 树 1.二叉树:①满二叉树 ②完全二叉树 ③二叉排序树BST ④平衡二叉树AVL ⑤哈夫曼树 ⑥线索二叉树 2.森林 阅读详情

31.1    Bash博弈

只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

很容易想到当n%(m+1)<>0时,先取必胜,第一次先拿走n%(m+1),以后每个回合到保持两人拿走的物品总和为m+1即可。

这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。

31.2    Wythoff博弈

有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10).可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而 bk=ak+k.

那么任给一个局势(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,若都不是,那么就不是奇异局势。然后再按照上述法则进行,一定会遇到奇异局势。

31.2.1   实例

PKU JudgeOnline, 1067, 取石子游戏.

31.2.2   问题描述

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

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

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

31.2.3   输入

21

84

4 7

31.2.4   输出

0

1

0

31.2.5   程序

#include<iostream>
using namespace std;
int main()
{
     int k,n,m;
     doubler=0.6180339887,R=1/r;
     while(scanf("%d%d",&n,&m)+1)
     {
         if(n>m)
         {
              k=n;
              n=m;
              m=k;
         }
         k=n*r;
         if(n!=(int)(k*R))
              ++k;
         printf("%d\n",m!=(int)(k*R)+k);
     }
     return 0;
}

31.3    Nim博弈

有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

对于任何奇异局势(a,b,c),都有a^b^c=0。

非奇异局势(a,b,c)(a<b<c)转换为奇异局势,只需将c变为a^b,即从c中减去 c-(a^b)即可。

31.3.1   实例

PKU JudgeOnline, 2234, Matches Game.

31.3.2   问题描述

有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

31.3.3   输入

245 45

3 3 6 9

1.3.4   输出

No

Yes

31.3.5   程序

#include<iostream>
using namespace std;
int main()
{
       inti,k,n;
       while(scanf("%d",&n)+1)
       {
              for(k=0;n--;)
              {
                     scanf("%d",&i);
                     k^=i;
              }
              if(k)
                     printf("Yes\n");
              else
                     printf("No\n");
       }
       return0;
}

本文章欢迎转载,请保留原始博客链接http://blog.youkuaiyun.com/fsdev/article

黑猫带你学UFS协议第23篇:UFS固件升级操作详解(FFU) 摘要:本文介绍了UFS固件更新(FFU)的实现方法与注意事项。根据UFS3.1 JEDEC协议,FFU通过write buffer命令(MODE=0Eh)下载FW固件,随后必须进行power cycle或硬件复位生效。文章详细阐述了FFU操作的10条规则,包括数据分片传输要求、寄存器访问限制等,同时指出协议未明确的厂商实现差异。关键寄存器包括bFFUTimeout、bDeviceFFUStatus和fPermanentlyDisableFwUpdate。 阅读详情

相关推荐

双传声器法测量吸声材料的吸声系数(公式推导与解释)

在双传声器法中,通过测量两个位置的声压 p1和 p2​,可以分离出入射波和反射波的声压分量。双传声器法一般在阻抗管中进行,阻抗管的一端为平面波声源,另一端放置待测材料。两个传声器放置在靠近材料的阻抗管内,用于测量管道内的声压。双传声器法是一种常用于测量材料吸声系数的实验方法,通过在管道内使用两个传声器测量声波的入射和反射,来计算出材料的吸声系数。当测试样品较少时,测试时,需要交换两个传声器的位置,目的是为了相位校准。

m0_57407372的博客 1875

AI作业ch5

1 1. 对于如图 1 所示的博弈树,假若 A 在极大值层,它该选什么样 的走步? 2. 在上题的博弈树中,用剪枝过程需要检查哪些节点? 检查了L,M,N,P,Q,R,S,V,W,X 没检查O,T,U,Y 2 有一种N/M或“最后者输”的博弈游戏,其玩法如下:开始有9枚硬币,两人轮流取出1、2或3枚,取出最后一枚者为输,实用搜索树证明后起步者总能取胜。 当MAX状态下硬币数量为1则说明后手方胜利 首先在MAX取剩下6情况下得到必胜情况5的分支,那么后续我们考虑7和8的时候,因为可以选择到5这个情

JamSlade的博客 8537

【阿里云大模型高级工程师ACP学习笔记】2.8 部署模型

【摘要】本文主要分享自学阿里云大模型高级工程师 ACP 认证中《2.8 部署模型》的学习笔记。详细介绍学习目标、梳理涵盖的知识点并评估其重要性和难易度,对既重要又困难的知识点进行重点分析,旨在为对阿里云大模型学习和认证感兴趣的读者提供学习思路和经验参考。

davidkorhenn的博客 2060

【人工智能】习题——博弈搜索

实际上,当n=k(m+1)+1时,后手必胜。设先手取出x个物品,后手只需要取出m+1-x个物品,使得n整除m+1的余数为1,且后手方仍是后手方。即先手必败后手必胜。本题中n=9,m=3,n=2(3+1)+1,满足后手必胜条件。通过搜索树得知,当先手的局面剩5个硬币时,后手必胜,而无论先手在第一步时取走几个硬币,后手总能使先手在第二步决策时只剩下5个硬币。有一种N/M或“最后者输”的博弈游戏,其玩法如下:开始有9枚硬币,两人轮流取出1、2或3枚,取出最后一枚者为输,试用搜索树证明后起步者总能取胜。

weixin_62466076的博客 1415

获取本机正版windows10激活密钥,以及正版office

本方法面向的是以前买过笔记本电脑给你预装了正版系统,激活了正版office(一般是家庭版)的情况,其他情况请自行尝试。

qq_45774917的博客 2万+

告别安装烦恼!Orange3 3.38.0 Windows绿色版下载即用,附保姆级汉化与组件配置指南

本文详细介绍了Orange3 3.38.0 Windows绿色版的下载与使用,包括中文汉化、组件配置及高效管理技巧。这款无需安装的数据科学工具特别适合快速验证想法的研究人员和移动办公用户,支持多种数据源和可视化工具,大幅提升工作效率。

weixin_30897233的博客 602

2022秋季《人工智能》_ch05

题目 1)对于如图所示的博弈树,假若A在极大值层,它该选什么样的走步? 2)在上题的博弈树中,用剪枝过程需要检查哪些节点? A→D→J→W A\rightarrow D\rightarrow J\rightarrow W A→D→J→W L,M,N,P,Q,R,S,V,W,X L,M,N,P,Q,R,S,V,W,X L,M,N,P,Q,R,S,V,W,X ...

rd142857的博客 8674

IEC 61400-1:2019 附录 C 湍流模型全面解读

IEC 61400-1:2019 附录 C 全面解读

weixin_46713695的博客 471

《博弈论全家桶》(ACM / OI)(超全的博弈论 / 组合游戏大合集)

超级全的博弈论大合集 !

繁凡さん的博客 2万+

Android 11多窗口+分屏+APP窗口嵌套TaskView实现原理一

然而随着版本的迭代升级,google对分屏的定制差异化也越来越大,Androd 11的分屏用的是split-screen-primary和split-screen-secondary的方式,在systemui中去实现的,其定制化的灵活度不是很高,很多业务都是放到sustemui或者fw去实现,但是随着版本的升高,后面出现了TaskView来替代了老版本的分屏方式,但是Task的核心原理其实和之前的方式是一样的,TaskView来实现分屏。

qq_18420641的博客 2615

【YOLO26实战全攻略】10——YOLO26+SAM3实战:从检测到像素级分割的全流程指南(含PCB缺陷检测案例)

本文聚焦YOLO26与SAM3的融合应用,系统讲解“检测+分割”的三种核心模式:YOLO26原生分割(轻量高效)、YOLO26检测+SAM3精细分割(精度极致)、SAM3自动标注+YOLO26蒸馏(低成本冷启动)。从环境搭建、数据集准备、模型训练、性能优化到边缘部署,提供 step-by-step 实操教程,配套完整可运行代码与执行结果。结合虚拟PCB缺陷检测案例,展示像素级缺陷识别与几何参数测量的工业级应用流程。本文兼顾新手入门与进阶提升,注重实用价值,读者可直接参考搭建自己的分割系统。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 625

实用算法实现-第 31 篇 博弈游戏

31.1 Bash博弈 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 很容易想到当n%(m+1)&lt;&gt;0时,先取必胜,第一次先拿走n%(m+1),以后每个回合到保持两人拿走的物品总和为m+1即可。 这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。 31.2 Wythoff博弈 有...

luotuoass 222

【大模型】AI 辅助编程操作实战使用详解

AI 编程实战使用详解

congge 8461

2177博弈问题 取石子游戏 算法

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2177我的解法:http://blog.youkuaiyun.com/a0210077/archive/2010/01/22/5223032.aspx算法原帖地址:http://www.pinggu.org/html/2007-7/21/211066.html 0 0         相差01 2   

a0210077的专栏 985

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

博弈论模板

博弈论讲解 : 【算法讲堂】【电子科技大学】【ACM】博弈论基础 SWPU-ACM每周算法讲堂-博弈论入门 博弈论题目有如下特征: 1.有两名选手; 2.两名选手交替操作,每次一步,每步都是在有限的合法集合中选取一种进行; 3.在任何情况下,合法操作只取决于情况本身,与选手无关; 4.游戏的败北条件为:当某位选手需要进行操作时,当前没有任何可以执行的合法操作,则该选手败北。 ...

UncleJokerly 936

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

博弈论题目集 (持续更新)

巴什博弈HDU 1846 这个应该比较好推: 如果 n % (m+1)==0 后手胜利 否则 先手胜利 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main(){ int t; scanf("%d",&t); while(t--){ int n,m; scanf("%d%d",&n,&m); if(n...

weixin_43824564的博客 3948

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

算法集训队第二场考核赛_A.博弈游戏

原题链接:算法集训队第二场考核赛_A.博弈游戏 A.博弈游戏 题目描述 AliceAliceAlice 和 BobBobBob 在玩博弈游戏,游戏规则如下: 首先,两人先从 1900.1.11900.1.11900.1.1 到 2001.11.42001.11.42001.11.4 中随意抽一个日期,然后两人轮流进行操作: 操作 111 : 把日期的天数加 111,例如 1999.4.51999.4.51999.4.5 变到 1999.4.61999.4.61999.4.6 操作 222 : 把月份加 1.

m0_46626543的博客 2261

信奥中的数学:博弈论

第7章 博弈论(《信息学奥赛一本通 提高篇》第6部分 数学基础) 例1 取石子游戏 取石子游戏(hdu1527 博弈) - 寻找&星空の孩子 - 博客园 取石子游戏_whiterbear的专栏-优快云博客 【计蒜客习题】取石子游戏 - Mr^Kevin - 博客园 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客园 1663:【 例 1】取石子游戏 1 信息学奥赛一本通(C++版)在线评测系统 一本通1663【 例 1】取石子游戏 1 - 人间不值の - 博客

青少年趣味编程 803

hdu 2516 取石子游戏 Fibonacci博弈 入门题

Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win". Input 输入有多组.每组第1行是2<=n<2^31. n=0退出. Output 先取者负输出"Second win". 先取者胜输出"First win". 参看Sample Output.

Lionel 1098

【博弈论】 HDU 2516 取石子游戏

取石子游戏 【传送门】 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9884Accepted Submission(s): 5973 Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取...

lesileqin的博客 283

人工智能博弈树算法做的井字棋游戏

不会输,超碉!井字棋这个游戏真是太无聊啦! 算法大概就是,有一个给状况进行估价的函数,深搜每种状况,假设每个人都按对自己最有利的方式走(假设玩家也是不傻),最后让电脑走出最有利的一步。 实验报告: http://wenku.baidu.com/view/b48996b78bd63186bcebbcba.html 代码: 1 //#pragma comment(linker, ...

weixin_33748818的博客 2392

[NOIP2010 普及组] 三国游戏(C++,贪心,博弈论)

这是一道博弈论类型的题目,绝对不要用代码模拟游戏过程,只需要去证明获胜的条件即可

m0_74036684的博客 745

机器智能-高频问题:博弈

1、博弈:竞争环境中多个agent之间的目标是有冲突的,称为对抗搜索问题,也称为博弈。 2、特点:问题复杂,注重时间效率(时间要求高),实时性强; 3、博弈一般都是有完整信息的,确定的,轮流行动的,两个游戏者的零和游戏(利弊等值,结果加起来等于0) 4、零和游戏:在严格竞争下,一方的收益必然意味着另一方的损失,博弈各方的收益和损失相加总和永远为“零”,双方不存在合作的可能 5、博弈游戏,目的是寻找...

君陌的博客 2409

【板子】博弈论

这里存放三种基础博弈论的板子。 看代码趴,注释写了应用情况。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 int n,m,x; ...

deze1991的专栏 229
上一篇: 实用算法实践-第 30 篇 组合数学
下一篇: 并行博弈树搜索算法-第1篇 什么是博弈树搜索算法
存储李希
博客等级 码龄15年 418粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值