最近算法课在学博弈论的知识,顺手把算法题中的涉及到博弈论一并总结了
这篇文章的有些内容是参考了大佬的
可能有遗漏。。。。
(一)巴什博弈(BAsh Game)

题目模板

  • 只有一堆n个物品
  • 两个人轮流取,每次只能取1~m个物品,谁先取完,谁胜利;(n,m是输入的随机数)

解题思路

  1. 当 n = m + 1 时 第一个取的人不可能获胜;
  2. •当 n = k*(m + 1) + r 时           (k,r,s都是未知的整数)

•当 n = k*(m + 1) + r 时 (k,r,s都是未知的整数)

•先取者拿走 r 个,那么后者再拿(1~m)个

• 此时 n =(k-1)*(m+1)+s

•先取者再拿走s 个 最后总能造成 剩下n=k*(m+1) 的局面

•若n=k*(m+1) 那么先取者必输

若n=k*(m+1) 那么先取者必输

求解巴什博弈函数

  1. int Bash_Game(int n,int m)//是否先手有必赢策略
  2. {
  3. if (n%(m+1)!=0)
  4. return 1;
  5. return 0;
  6. }

样题:HDU 2147 kiki's game            HDU 2149 Public Sale          HDU 1846 Brave Game       HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者

(二)威佐夫博奕(Wythoff's game)

题目模板

  • 有两堆各若干个
  • 两个人轮流从某堆或同时从两堆取同样多的物品
  • 规定每次至少取一个,多者不限,最后取光的人胜利

解题思路

  • 两堆石子的状态为 [a,b] (满足a<=b)
  • 当 a=(k*(√5+1)/2), b=a+k 时满足奇异局势,那么则先手输,反之则先手赢

求解威佐夫博奕函数

  1. int Wythoff_Game(int a,int b)//b要大于a
  2. {
  3. double x=(1+sqrt(5))/2;
  4. int n=b-a;
  5. if(a==(int)(x*n))
  6. return 1;
  7. return 0;
  8. }

样题:HDU 1527 取石子游戏           HDU 2177 取(2堆)石子游戏

(三) 尼姆博奕(Nimm's Game)

题目模板

  • 有多堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

解题思路

  • 用0与每个数异或,如最后结果为0,则后手胜

  • 设一数组a[n][m],令sum=0

  • 循环与数组每一个数据异或(sum^=a[i][j])

  • sum最后等于0则后手胜

​​​​​​​求解尼姆博弈函数

a[m]每堆物品的数量  sum=0

  1. int Nimm_Game(int n,int m)//n堆物品,m个物品
  2. {
  3. for(int i=0;i<n;i++)
  4. for(int j=0;j<m;j++)
  5. sum = sum ^ a[i][j];
  6. if(sum == 0)
  7. return 0;
  8. return 1;
  9. }

样题:HDU 1850 Being a Good Boy in Spring Festival

HUD 1907 John        HDU 2509 Be the Winner

           HDU 1849 Rabbit and Grass

(四) 斐波那契博弈

题目模板

  • 有一堆个数为n的石子,游戏双方轮流取石子,
  • 满足:
  • 先手不能在第一次把所有的石子取完;
  • 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)

求解斐波那契博弈函数 f[50]

  1. int Fib_Game(int n)
  2. {
  3. f[1]=1;f[2]=1;
  4. for(int i=3;i<=50;i++)
  5. f[i] = f[i-1] + f[i-2];
  6. if( 数组f 中包含 n )
  7. return 1;//先手赢
  8. return 0;
  9. }

样题:HDU 2516 取石子游戏

(五) 环形博弈

题目模板

  • n个石子围成一个环,每次取一个或者取相邻的2个(每个石子有序号)

​​​​​​​求解

  • 石子数<=2先手赢,否则后手赢

ACM 博弈专题(5种模板)相关推荐

  1. ACM 博弈 只是总结 ( ZZ自奋斗哥 )

    以下是我从网上收集的关于组合博弈的资料汇总: 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个 人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏 ...

  2. Phpcms v9专题分类增加模板设置的方法

    Phpcms v9专题设置里面,默认专题子分类是无模板设置的,本文教你通过官方论坛给出的教程实现专题分类增加模板设置.先来看看默认专题子分类设置界面: 修改后的的专题子分类设置界面多了模板设置: 修改 ...

  3. 提高开发效率之安卓模板(上面有四种模板的教程,我之前会两种,看完之后还是只会两种2333)

    原文地址: juejin.im/post/5c7339- 在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民工,难免会总结一些提高生产力的 ...

  4. 最短路常用的四种模板(poj1847)

    针对于poj1847这道题,总结一下最短路常用的四种模板. ** Floyed(O(n^3)) ** #include<iostream> #include<cstdio> # ...

  5. LCA求解的四种模板

    LCA求解的四种模板 或许更好的阅读体验 树剖在线求解LCA 思想 树剖这里就不多解释了,求解LCA的过程就是轻重链的跳转,跟树剖求任意两点间的距离一样的操作,只不过不用线段树去维护disdisdis ...

  6. poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)

    1 /* 2 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! 3 */ 4 #include<iostream> 5 #include<cstring> 6 ...

  7. ACM数论专题3——素数(质数)

    ACM数论专题3--素数 素数是什么 蛮力算法求素数 蛮力算法的实现以及分析 时间复杂度 蛮力算法的改进 时间复杂度 **埃筛** 时间复杂度 线筛 线筛原理分析 线筛实现 素数是什么 质数1 (pr ...

  8. 【模板】ACM Conference的Latex论文模板与说明

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.blog.csdn.net] 目录 cls文件说明 ACM会议论文模板 9pt和10pt模板 cls文件说明 原版文件链接:https://c ...

  9. php cms带专题,phpcms标签模板及专题模板的制作

    phpcms标签模板及专题模板的制作 互联网   发布时间:2009-06-06 15:44:59   作者:jb51   我要评论 关键字描述:模板 制作 专题 标签 &quot & ...

最新文章

  1. 对于七段数码数字模型进行改进:一个关键的数字1的问题
  2. 中美数据中心产业对比及思考
  3. 牛客网(剑指offer) 第十五题 反转链表
  4. TCP/IP的七层负载均衡
  5. linux中一条命令将文件转换为UTF-8格式-解决乱码
  6. docker安装mysql数据库映射_Docker安装mysql数据库
  7. Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)【Dalston版】
  8. linux下c语言scanf,C语言输入scanf
  9. 设计模式之美 - 64状态模式
  10. Pcap封包维护工具
  11. java请求参数_在Java中发送http的post请求,设置请求参数等等
  12. 随便谈谈alphago与人机大战
  13. ESP8266 WIFI模块学习基础入门
  14. [渝粤教育] 西南交通大学 土木工程试验与量测技术 参考 资料
  15. 如何查询网站被搜狗收录,搜狗收录查询工具
  16. iPhone/iPad/Android UI尺寸规范
  17. 同余2:线性逆元和中国剩余定理的学习笔记
  18. GRASPIT安装流程
  19. R语言绘图中图片的组合(cowplot、patchwork宏包、layout、par()、gridExtra)
  20. Java反射系列--Type接口及其子接口

热门文章

  1. 【147天】尚学堂高淇Java300集视频精华笔记(108-109)
  2. MFC中的几个常用类——CFileDialog
  3. WEB平台架构之:LAMP(Linux+Apache+MySQL+PHP)
  4. python手机端给电脑端发送数据_期货交易软件有哪些比较好用?分手机端和电脑端...
  5. 程序员到底要不要重复造轮子?
  6. 7.Java常用开发工具
  7. 科普dip,dp,sp,dpi,ppi,px,Density
  8. android 双线程等待,在Java/Android中启动另一个线程之前如何等待线程完成?
  9. esp32 嵌入式linux,初体验乐鑫 ESP32 AT 指令-嵌入式系统-与非网
  10. miui游戏驱动程序偏好设置_米粉必看:小米官方教你如何关闭 MIUI 广告 - 小米,MIUI...