博弈论之巴什博弈

博弈

博弈这个词看着就高大上,”小友留步,老夫一时兴起可否愿意陪我这老头子对弈一番。”“对弈”、“博弈”一词用上,是不是瞬间感觉超然物外许多。博弈算法亦是如此,精通了之后就感觉对于各种态势的发展了如指掌,世间万物皆系于我一手之间。(说这么多,就是为了读者能好好仔细在下的文章。也实在是写不容易。)


三大博弈

巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个。最后取光者得胜。(必须是一堆才试用哦。) 
相信大家都玩过,两个人查数,一个人最少说1个数最多说3个数(或好几个不等),谁最后数到某一个数谁就赢。想想那时候为了这个游戏可是绞尽脑汁。学了我这个巴什博弈之后,一口气单挑5个不费劲。 
来个具体的例子

一堆石子,两人轮流取,一次最多取4个(至少取一个)。最后取者为胜。你总是先手,两人都采取最优策略,试问这堆石子多少的时候你是胜利,多少的时侯你是失败? 
一拿到题就蒙了,卧槽?给我这么少的条件就让我判断,而且结局就决定了结果?中间那么多过程就都不考虑了? 
首先,不要慌既然题都这么问了,那一定有解决的办法的。这时候就需要我们仔细分析一下了。如果这对石子是**小于等于**4的,我么你先手,所以当然我们赢了。那如果是5那?再考虑考虑如果是10那?(一定要仔细考虑。)

———-考虑-ing. 
下面来总结规律,对,就是规律,不然你以为这么点太条件你就想搞大事情? 
规律就是…..是什么那?等一下啊,我先看看笔记。

其实规律很简单,就是多读书多看报,少吃零食多睡觉。啊嗯!严肃了。其实,我们不难发现如果我们起手面对的情况是(n+1)k(k=0,1,2…n)的情况就必输了,n就是最多可以拿的石子个数(也就是上面的 4)。 
在博弈论中像(n+1)这样的必败局有一个专业名词叫奇异局。就是说如果双方都采取最优策略,而你又处于奇异局,那么最后你必败。

好了,规律总结完了,该分析分析了。如果我们上来就遇见(n+1)k的局势,就双手离开键盘吧。真的没救了,因为如果你挣扎拿 p 
个你的对手拿 n-p+1 个,然后你将面对(n+1)(k-1),直至最后你面对 n+1 ,你最多拿 n 
个,你的对手拿一个终结你,你最少拿 1 个,你的对手拿 n 
个终结你。(这是个悲伤故事。)相反的,如果你不是处于奇异局,比如是(n+1)k+r(r<(n+1)这是一定的,如果r>(n+1),倍数就是k+1,所以余出来的一定小于(n+1)),记下来就只需要嘿嘿嘿…明白怎么做吧? 拿出r个石子,你的对手就进入奇异局,而他还浑然不知,困兽犹斗。而你就可看庭前花开花谢,云卷云舒。

下面一个例题:

哈士奇“下棋”

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

   

 ACM集训队有个叫 7989 的学长,一天,哈士奇和 7989 玩一种新的棋牌游戏,游戏规则如下:
 
     棋盘是一个长度为 N 宽度为 1 的方格纸,由 N 个边长为一的正方形组成,哈士奇和 7989 轮流在棋盘上放棋子,每次可以放 1 ~ M 个棋子,第一个没办法落子的人输掉比赛。
     看完游戏规则,聪明的哈士奇立刻就发现了必胜的诀窍:游戏的输赢与先手后手有着很大的关系!
     于是当先手必输时,哈士奇会假装谦让的将先手权交给 7989。
     现在给你棋盘长度 N 和 最大落子数 M,你知道哈士奇会做什么样的决定吗?
 

Input

 输入包含多组,每组两个整数 N,M(1 <= N,M <= 10000)。

Output

 对于每组数据,如果哈士奇先手必输,输出 “Send to you!”,否则输出 “I'm first!”。

Sample Input

4 10
2 1

Sample Output

I'm first!
Send to you!

AC代码 :

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, m;
    while (cin >> n >> m)
    {
        if (n % (m + 1) == 0)
            cout << "Send to you!" << endl;
        else 
            cout << "I'm first!" << endl;
    }

    return 0;
}

/***************************************************
User name: QXQZX
Result: Accepted
Take time: 0ms
Take Memory: 196KB
Submit time: 2018-12-16 00:17:50
****************************************************/

猜你喜欢

转载自blog.csdn.net/Cherishlife_/article/details/85028260