zoukankan      html  css  js  c++  java
  • 浅谈阶梯博弈

    今天在POJ做了一道博弈题..进而了解到了阶梯博弈…下面阐述一下我对于阶梯博弈的理解..
    首先是对阶梯博弈的阐述…博弈在一列阶梯上进行…每个阶梯上放着自然数个点..两个人进行阶梯博弈…每一步则是将一个集体上的若干个点( >=1 )移到前面去..最后没有点可以移动的人输..
    这里写图片描述

    如这就是一个阶梯博弈的初始状态 2 1 3 2 4 … 只能把后面的点往前面放…如何来分析这个问题呢…其实阶梯博弈经过转换可以变为Nim..把所有奇数阶梯看成N堆石子..做nim..把石子从奇数堆移动到偶数堆可以理解为拿走石子..就相当于几个奇数堆的石子在做Nim..( 如所给样例..2^3^4=5 不为零所以先手必败)为什么可以这样来转化?
    假设我们是先手…所给的阶梯石子状态的奇数堆做Nim先手能必胜…我就按照能赢的步骤将奇数堆的石子移动到偶数堆…如果对手也是移动奇数堆..我们继续移动奇数堆..如果对手将偶数堆的石子移动到了奇数堆..那么我们紧接着将对手所移动的这么多石子从那个奇数堆移动到下面的偶数堆…两次操作后…相当于偶数堆的石子向下移动了几个..而奇数堆依然是原来的样子…即为必胜的状态…就算后手一直在移动偶数堆的石子到奇数堆..我们就一直跟着他将石子继续往下移..保持奇数堆不变…如此做下去..我可以跟着后手把偶数堆的石子移动到0..然后你就不能移动这些石子了…所以整个过程..将偶数堆移动到奇数堆不会影响奇数堆做Nim博弈的过程..整个过程可以抽象为奇数堆的Nim博弈…
    其他的情况…先手必输的…类似推理…只要判断奇数堆做Nim博弈的情况即可…
    为什么是只对奇数堆做Nim就可以…而不是偶数堆呢?…因为如果是对偶数堆做Nim…对手移动奇数堆的石子到偶数堆..我们跟着移动这些石子到下一个奇数堆…那么最后是对手把这些石子移动到了0..我们不能继续跟着移动…就只能去破坏原有的Nim而导致胜负关系的不确定…所以只要对奇数堆做Nim判断即可知道胜负情况…

  • 相关阅读:
    Mac sublime安装package controller
    git 指定从其他分支拉取commit
    一台电脑多个git使用 push 时候出现denied
    hibernate class cast exception from object to ...
    PostgreSQL数据类型
    spring 注入失败
    angularJS seed 安装
    PowerMockito(PowerMock用法)
    powermockito “mock public 方法内部 Private方法的问题”
    快速创建maven 工程:simple java工程,webapp
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626734.html
Copyright © 2011-2022 走看看