博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
博弈论入门 Bash 、Nim 、Wythoff's Game结论及c++代码实现
阅读量:5787 次
发布时间:2019-06-18

本文共 1616 字,大约阅读时间需要 5 分钟。

SG函数先不说,给自己总结下三大博弈。和二进制及黄金分割联系密切,数学真奇妙,如果不用考试就更好了。

1.Bash Game:n个物品,最少取1个,最多取m个,先取完者胜。

给对手留下(m+1)的倍数肯定获胜。若n%(m+1)==0,先手必败。

51nod裸题:

1 #include 
2 #include
3 using namespace std; 4 int main(){ 5 int t; cin>>t; 6 int n,k; 7 while(t--){ 8 cin>>n>>k; 9 if(n%(k+1)==0) puts("B");10 else puts("A");11 }12 return 0;13 }

 

 

2.Nim Game:n堆物品,取某一堆的若干个,至少取一个,多者不限,先取完者胜。

在这个博弈中,对任何奇异局势 (a,b,c....n),都有a^b^...^n==0。

所以直接检测给的局势,若是奇异局,先手必败。

如何将(a,b,c)转化成奇异局:将c变为a^b,即c -= a^b(^是异或)

51nod裸题:

1 #include 
2 #include
3 using namespace std; 4 int main(){ 5 int a[1005]={
0}; 6 int ans=0; 7 int n; cin>>n; 8 for(int i=0;i
>a[i];10 ans^=a[i];11 }12 if(ans) puts("A");13 else puts("B");14 return 0;15 }

 

 

3.Wythoff's Game:两堆若干个,轮流从某一堆取任意个或同时从两堆取同样多任意个,最少一个,多者不限。先取完者胜。

局势:(ak,bk) 

前几个奇异局:(0,0)  (1,2)  (3,5)  (4,7)  (6,10)  (8,13)  (9,15)  (11,18)  (12,20)……

1.发现差值递增,且局面中第一个值为前面局面中没有出现过的数字的第一个数,且所有自然数都会出现。

2.再找规律:第一个值=(int) (差值*1.618) 而1.618 = ( sqrt(5)+1 )/2

3.所以,只要ak == (int) (bk - ak) * ( sqrt(5) + 1 ) / 2 先手必输,否则先手必胜

51nod裸题:

1 #include 
2 #include
3 #include
4 using namespace std; 5 double c=(sqrt(5)+1)/2; 6 int main(){ 7 int t; cin>>t; 8 int ak,bk; 9 while(t--){10 cin>>ak>>bk;11 if(ak>bk) swap(ak,bk);12 int n=(bk-ak)*c;13 if(ak==n) puts("B");14 else puts("A");15 }16 return 0;17 }

 

转载于:https://www.cnblogs.com/noobimp/p/10306311.html

你可能感兴趣的文章
HDUOJ---------(1045)Fire Net
查看>>
TextView 超链接点击跳转到下一个Activity
查看>>
Java技术专题之JVM逻辑内存回收机制研究图解版
查看>>
mysql经常使用命令
查看>>
sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ?
查看>>
UNIX环境高级编程之第4章:文件和文件夹-习题
查看>>
bzoj2843极地旅行社题解
查看>>
【Linux】Linux中常用操作命令
查看>>
MyBatis3-SqlSessionDaoSupport的使用
查看>>
ReactiveSwift源码解析(三) Signal代码的基本实现
查看>>
MVC模式利用xib文件定制collectionCell
查看>>
(六)Oracle学习笔记—— 约束
查看>>
【SQL】查询数据库中某个字段有重复值出现的信息
查看>>
mysql 行转列 列转行
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
Open Graph Protocol(开放内容协议)
查看>>
模块化(1):基本思路
查看>>
Ubuntu18.04中配置QT5.11开发环境
查看>>