zoukankan      html  css  js  c++  java
  • 学习笔记 巴什博弈

    巴什博奕

    开始之前

    先来一个简化版本(小学奥赛版本):
    
    某毒瘤给hsez2017级信息奥赛生一堆胸牌 共n个
    
    而且十分大方 这个n是<=10^6滴
    
    每一次只可以取一个或者两个
    
    规定取走最后一个的人是胜者
    
    现在zmj与leizi玩这个游戏
    
    由于zmj有一对"沙包大的拳头",所以leizi让zmj先取
    
    但是由于zmj输了 就会给leizi一大把麻花
    
    所以leizi要求多玩几局
    
    请问:zmj是否存在必胜策略????
    
    

    请您多想一想否则游戏玩完就等于zmj的麻花玩完

    其实十分好想的

    只有一个胸牌时 zmj赢然后被leizi打残

    只有两个胸牌时 zmj赢然后被leizi打残

    只有三个胸牌时 zmj取一个还是取两个最后都是leizi取光

    即leizi最后赢然后把zmj打残

    那么我们扩展一下

    很显然 我们可以把胸牌分一下

    每为好几个为3的胸牌堆

    以及剩下一个余为0或1或2的胸牌堆

    这样的话 就只有两种情况

    1.余为0的话 每一次zmj取一个leizi就取两个

    每一次zmj取两个leizi就取一个

    ......

    最后保证leizi取走了最后一个

    2.余不为0的话

    一开始zmj用TA那"沙包大的拳头"取走一个残堆

    然后每一次leizi取一个zmj就取两个

    每一次leizi取两个zmj就取一个

    ......

    最后保证zmj取走了最后一个

    但是无论怎麽样最后zmj的麻花还是扑街

    这样的话我们就可以透彻巴什博奕了

    开始正式的YY

    这一次kmt又送了一大包胸牌 共n个
    
    而且n还是<=10^6滴
    
    每一次最少取1个 最多取m个
    
    两个人轮流取 规定谁取走最后一个就是人生赢家
    
    那么先手胜 条件就是:n%(m+1)!=0;
    
    后手胜的条件自然就是n%(m+1)==0
    
    
    

    -----------------------------------下划线-------------------------------------------

    其实TA还有一个变种

    那就是 谁取到最后一个谁输

    我们思考一下现在该怎么办???

    心理学分析:
    
    如果先手要赢的话 就要等到后手拿时 只有一个
    
    后手同理
    
    所以最后的规律就是
    
    (n-1)%(m+1)==0 ? 后手胜 : 先手胜
    

    个人认为:

    巴什博奕算得上是最古老的也是最简单的博弈之一了

    例题

    【HDU1846】

    【HDU4764】

  • 相关阅读:
    生活的真谛
    WSDL文件简介(附例子)
    关于智慧
    叔叔的去世
    google labs
    项目需求工具
    agent/angel/angle
    关于地图投影的C程序的一些说明
    Ubuntu下开启Apache重写扩展
    PHP内置函数之ctype_alnum() 函数检查字符串是否由字符和数字组成
  • 原文地址:https://www.cnblogs.com/LovToLZX/p/13757522.html
Copyright © 2011-2022 走看看