博弈初级小结

一、巴什博奕!!!!

巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

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

对于巴什博奕,那么我们规定,如果最后取光者输,那么又会如何呢?

(n-1)%(m+1)==0则后手胜利

先手会重新决定策略,所以不是简单的相反行的

例如n=15,m=3

后手 先手 剩余

0 2 13

1 3 9

2 2 5

3 1 1

1 0 0

先手胜利 输的人最后必定只抓走一个,如果>1个,则必定会留一个给对手。

经典初级题:HDU 1846   解题  我待水似流年,流年待我似水   HDU  2149  解题  我待水似流年,流年待我似水

二、威佐夫博奕!!!!

威佐夫博弈(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

公式:x>y,如果y=(取整)(x-y)*((1+根号5)/2)时,先下就输了!!!

经典初级题:HDU 1527 解题  我待水似流年,流年待我似水   HDU 2177 解题  我待水似流年,流年待我似水

三、尼姆博弈!!!!

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

这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。

可以推广到m堆!!!!!

初级经典题:HDU  2176  我待水似流年,流年待我似水

四、SG函数!!!!!

SG函数,可以说是ICG游戏的钥匙!!

很难理解,百度吧!!!!下面送上模板!!!

void getsg(int n,int m,int *f)//n为石子范围,m为f数组的最大下标,*f为可取石子的值
{
    int i,j;
    memset(sg,0,sizeof sg);
    for(i=1;i<=n;i++)
    {
        memset(next,0,sizeof next);
        for(j=0;j<m;j++)
        {
            if(i<f[j])
                break;
            next[sg[i-f[j]]]=1;
        }
        for(j=0;j<=1000;j++)
        {
            if(!next[j])
            {sg[i]=j;break;}
        }
    }
}

初级经典题:HDU  1848   我待水似流年,流年待我似水

博弈初级小结,布布扣,bubuko.com

时间: 2024-10-07 23:04:39

博弈初级小结的相关文章

组合博弈入门小结(更新中)

这几天开始学习博弈,发现这一块是个难啃的骨头.以下是我从网上收集的资料汇总: 我国民间有个古老的游戏:就是有物品若干堆,(物品可以是火柴,围棋都可以).两个人轮流从堆中取若干件,规定取光物体者为胜.这个就是我们今天要研究的组合游戏. 组合游戏定义: 1.有且仅有两个玩家    2.游戏双方轮流操作    3.游戏操作状态是个有限的集合(比如:取石子游戏,石子是有限的,棋盘中的棋盘大小的有限的)  4.游戏必须在有限次内结束  5.当一方无法操作时,游戏结束. 现在我们来研究如何取胜: (一)巴什

博弈题目小结

HDU 2174 kiki's game 题意:有一个N*M的棋盘,起点在右上角,两个人每轮可把棋子向左.向下或者向左下移动一格,直到不能移动棋子者输. NP图解决: 概念: 必败点(P点):前一个选手将取胜的位置称为必败点. 必胜点(N点):下一个选手将取胜的位置成为必胜点. 性质: 步骤: NP图: AC code: 1 #include <bits/stdc++.h> 2 #define inc(i, j, k) for(int i = j; i <= k; i++) 3 #def

博弈论类题目小结——转载

出处http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 首先当然要献上一些非常好的学习资料: 基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_cxlove/article/details/7854534 经典的删边游戏小结:http://blog.csdn.net/acm

小结 - 基础博弈

小结一下基础博弈,因为暂时对博弈的理解还不是很深,只能说一下我对这段时间对博弈的认识. 博弈论的简介 博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论.博弈论是研究互动决策的理论.博弈可以分析自己与对手的利弊关系,从而确立自己在博弈中的优势,因此有不少博弈理论,可以帮助对弈者分析局势,从而采取相应策略,最终达到取胜的目的.博弈的类型分为:合作博弈.非合作博弈.完全信息博弈.非完全信息博弈.静态博弈.动态博弈,等等. 基础概念 必胜态:通过某一步可以转移到必

java集合框架小结(初级版)

今天大概的整理了一下java集合框架,在这里做一个小结,方便以后查阅,本博文主要参考资料为<java编程思想第四版>第11章——持有对象以及JAVA 1.6 API文档.并没有研究更深入的第17章<容器深入研究>.大概介绍了集合框架中几个比较常用的集合类. 以下为正文. 首先来看一张图,不太会用visio,画的可能不太好看 图中将接口.抽象类.实现类.淘汰类(圆角矩形)进行标注.有直线连接的类(或接口)表示是子类关系或者实现关系 由图示可以看出,集合类主要有两个集合接口: 1.Co

威佐夫博弈 【入门小结】

威佐夫博弈 今天新学了个博弈论的东西(还未理解透彻) 威佐夫博弈的题型是:一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者. 这里提到了一个概念:奇异局势. 那些证明什么的我也不会,网上也一堆. 大概就是设两堆石子的状态为 [ak,bk] (满足ak<=bk),那么当 ak=(k*(√5+1)/2), bk=ak+k ,则当前状态为奇异局势,那么则先手输,反之则先手赢(因为先手可以一步将非奇异局势转化为奇异局势) 废话:(√5+1)/2 

小结博弈

参考资料:https://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 一.巴什博奕 只有一堆物品,两人轮流取,每次最多m个,最少一个.最后取光者获胜 分析:假设共n个物品,n=m+1, 那么先手必败.所以为了先手必胜.可以把n表示为 n = k(m+1) + s  ,  s <= m 只要先手取s个,把数量维持到m+1的倍数即可.对方取r个,自己就取m+1-r个 二.威佐夫博弈 有两堆物品,两人轮流取,每次可以从一堆或两堆取相

Android初级第一次小结

eclipse所创工程的目录: src    源代码 gen   R文件    注册资源ID  (不用IO) assets   用来存放不需要编译的资源  (可以存在文件夹) bin     apk libs    用来存放外部的库 res     资源  会在R文件中注册  (命名:  字母:小写  _  数字  :数字不能开头) drawable   图片 layout     布局          xml : <名称  属性=值> </名称>   <名称  属性=值 

Android初级第二次小结

xml注释: <!-- 注释内容 --> 不能再标签的属性内部注释,在标签之外. 问题: 在控制台中出现: You must restart adb and Eclipse 关掉Eclipse以及模拟器并杀死adb.exe这个进程,重新启动 Activity   界面 四大组件之一 三大要素: 1.声明一个类继承Activity 2.关联布局文件(setContentView()) 3.必须在清单文件中注册 <activity android:name = 包名 + 类名/> 在清