当前位置 博文首页 > 白徽的博客:巴什博弈

    白徽的博客:巴什博弈

    作者:[db:作者] 时间:2021-07-15 19:06

    在看本文章之前,请先看一下,我在B站找到的巴什博弈的视频。
    巴什博弈

    巴什博弈:只有一堆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)的倍数,就能最后获胜。

    例题

    //Bash游戏
    #include <bits/stdc++.h> 
    using namespace std;
    
    
    int main(void){
    	int n;
    	cin>>n;
    	while(n--){
    		int a,b;
    		cin>>a>>b;
    		if(a%(b+1) == 0){
    			//此时后手赢得比赛
    			cout<<"B"<<endl; 
    		}else{
    			cout<<"A"<<endl;
    		}
    	}
    	
    	
    	return 0;
    }
    

    那么如果我们规定,最后取光者输,那么又会如何呢?

    还有一个题目也是此题的翻版。
    例题

    可以依照规律来看。

    设p为先手赢,n为后手应
    对前几个打表得:
    n:      1     2     3      4      5     6      7    8    9     10       11         12         13       14          15
    np态:  p      n    p      p      p    p      n      p     n    p      p          p             p         n           p      
    由图可得循环点为7
    1. 对于1,那么就是A取完就好 --A

    2. 对于2,只能是A拿一个 --B

    3. 对于3和4,都是A拿完 --A

    4. 对于5,靠向2,A取3,B只能1 --A

    5. 对于6,A取一个的话,B就是5的情况,B赢,取3个的话,B就是3的情况,B赢,取4个的话,B就是2的情况,A赢,所以A;

    6. 对于7,A取一个的话,B就是6的情况,B赢,取3个的话,B就是4的情况,B赢,取4个的话,B就是3的情况,B赢,所以B;

    以此类推,对于A取多少个,对于B来说总是有之前的方案对应;

    如果到这里你还有余力建议看给大家的东西:
    博弈论及算法实现

    SG函数和SG定理

    cs
    下一篇:没有了