• 博弈论简单入门sb总结


    博弈论简单入门sb总结


    下午讲博弈论。没预习,GG。

    整个下午都在学。

    0

    有一堆共n个石子,两个人轮流取石子,每个人一次可以取1到k个,取到最后一个石子的人胜利。

    小学生都会的sb题。若k+1|n,后手必胜。否则先手必胜。

    如果k+1|n,先手第一次取了a个的话,后手取k+1-a个就星了。最后先手GG

    否则先手一开始取n%(k+1)个,再按照上面的方法来玩。

    1

    有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取任意多个,取到最后一个石子的人胜利。

    引入一个叫SG函数的东西。(好吧那叫SG

    直接蒯了:

    一个局面的SG为mex{后继局面的SG}。
    mex运算为集合中没出现的最小的自然数。
    几个局面的和的SG为它们的SG的异或和。
    SG不为0时先手必胜,SG为0时后手必胜。
    

    mdzz不

    然后就很好球了。

    设SG(i)为一堆i个石子的SG值。

    SG(0)=0
    SG(1)=mex{SG(0)}=1
    SG(2)=mex{SG(0),SG(1)}=2
    ...
    SG(i)=mex{SG(0),SG(1),...,SG(i-1)}=i
    

    归纳法可证明SG(i)=i

    所以把每堆石子的个数xor起来,非0则先手胜,是0则后手胜。

    2

    有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取1到k个,取到最后一个石子的人胜利。

    加了一个限制,实际上将每个a[i]都%=(k+1)就星了。

    考虑感性证明,两个人互相取石子,一个人拿了x个,另一个人马上拿走k+1-x个。

    然后还是异或。

    3

    有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从至多m堆中取,每堆只能取1到k个,取到最后一个石子的人胜利。

    首先啃腚可以a[i]%=k+1

    emmmmm然后就很不爽了,这怎么做啊

    考虑一下m=1的情况(2号情况)的方案

    比如这几个SG值

    01110110
    10101011
    10010100
    

    xor起来是01001001

    所以先手一开始取走01001001即可,然后后手取了什么数位,先手也跟着取什么数位

    最后先手一定会取到所有都是00000000

    写到这吧

    做几道题再来(咕咕咕

  • 相关阅读:
    访问 http://localhost:8081对 flink 集群和任务进行监控管理
    Flink之流处理WordCount
    Flink之批处理WordCount
    为什么说JAVA中runnable接口的run方法运行在子线程?
    Java中的字符输入输出流练习
    在JAVA中实现文件读写练习
    JAVA自定义异常使用方法
    三种二叉树遍历的非递归算法
    C编译错误:Main.c:4:5: error: variably modified ‘f’ at file scope int f[maxn];
    中序+先序构造二叉树,后序遍历
  • 原文地址:https://www.cnblogs.com/xzz_233/p/8665993.html
Copyright © 2020-2023  润新知