ACM 博弈专题(5种模板)
最近算法课在学博弈论的知识,顺手把算法题中的涉及到博弈论一并总结了
这篇文章的有些内容是参考了大佬的
可能有遗漏。。。。
(一)巴什博弈(BAsh Game)
题目模板
- 只有一堆n个物品
- 两个人轮流取,每次只能取1~m个物品,谁先取完,谁胜利;(n,m是输入的随机数)
解题思路
- 当 n = m + 1 时 第一个取的人不可能获胜;
•当 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) 那么先取者必输
求解巴什博弈函数
- int Bash_Game(int n,int m)//是否先手有必赢策略
- {
- if (n%(m+1)!=0)
- return 1;
- return 0;
- }
样题: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 时满足奇异局势,那么则先手输,反之则先手赢
求解威佐夫博奕函数
- int Wythoff_Game(int a,int b)//b要大于a
- {
- double x=(1+sqrt(5))/2;
- int n=b-a;
- if(a==(int)(x*n))
- return 1;
- return 0;
- }
样题: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
- int Nimm_Game(int n,int m)//n堆物品,m个物品
- {
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++)
- sum = sum ^ a[i][j];
- if(sum == 0)
- return 0;
- return 1;
- }
样题: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]
- int Fib_Game(int n)
- {
- f[1]=1;f[2]=1;
- for(int i=3;i<=50;i++)
- f[i] = f[i-1] + f[i-2];
- if( 数组f 中包含 n )
- return 1;//先手赢
- return 0;
- }
样题:HDU 2516 取石子游戏
(五) 环形博弈
题目模板
- n个石子围成一个环,每次取一个或者取相邻的2个(每个石子有序号)
求解
- 石子数<=2先手赢,否则后手赢
ACM 博弈专题(5种模板)相关推荐
- ACM 博弈 只是总结 ( ZZ自奋斗哥 )
以下是我从网上收集的关于组合博弈的资料汇总: 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个 人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏 ...
- Phpcms v9专题分类增加模板设置的方法
Phpcms v9专题设置里面,默认专题子分类是无模板设置的,本文教你通过官方论坛给出的教程实现专题分类增加模板设置.先来看看默认专题子分类设置界面: 修改后的的专题子分类设置界面多了模板设置: 修改 ...
- 提高开发效率之安卓模板(上面有四种模板的教程,我之前会两种,看完之后还是只会两种2333)
原文地址: juejin.im/post/5c7339- 在平时的开发工作中,我们经常将一个地方的代码,复制粘贴到另外一个地方,俗称搬砖,搬砖搬多了,作为一个资深的挨踢民工,难免会总结一些提高生产力的 ...
- 最短路常用的四种模板(poj1847)
针对于poj1847这道题,总结一下最短路常用的四种模板. ** Floyed(O(n^3)) ** #include<iostream> #include<cstdio> # ...
- LCA求解的四种模板
LCA求解的四种模板 或许更好的阅读体验 树剖在线求解LCA 思想 树剖这里就不多解释了,求解LCA的过程就是轻重链的跳转,跟树剖求任意两点间的距离一样的操作,只不过不用线段树去维护disdisdis ...
- poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)
1 /* 2 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! 3 */ 4 #include<iostream> 5 #include<cstring> 6 ...
- ACM数论专题3——素数(质数)
ACM数论专题3--素数 素数是什么 蛮力算法求素数 蛮力算法的实现以及分析 时间复杂度 蛮力算法的改进 时间复杂度 **埃筛** 时间复杂度 线筛 线筛原理分析 线筛实现 素数是什么 质数1 (pr ...
- 【模板】ACM Conference的Latex论文模板与说明
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.blog.csdn.net] 目录 cls文件说明 ACM会议论文模板 9pt和10pt模板 cls文件说明 原版文件链接:https://c ...
- php cms带专题,phpcms标签模板及专题模板的制作
phpcms标签模板及专题模板的制作 互联网 发布时间:2009-06-06 15:44:59 作者:jb51 我要评论 关键字描述:模板 制作 专题 标签 " & ...
最新文章
- 对于七段数码数字模型进行改进:一个关键的数字1的问题
- 中美数据中心产业对比及思考
- 牛客网(剑指offer) 第十五题 反转链表
- TCP/IP的七层负载均衡
- linux中一条命令将文件转换为UTF-8格式-解决乱码
- docker安装mysql数据库映射_Docker安装mysql数据库
- Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)【Dalston版】
- linux下c语言scanf,C语言输入scanf
- 设计模式之美 - 64状态模式
- Pcap封包维护工具
- java请求参数_在Java中发送http的post请求,设置请求参数等等
- 随便谈谈alphago与人机大战
- ESP8266 WIFI模块学习基础入门
- [渝粤教育] 西南交通大学 土木工程试验与量测技术 参考 资料
- 如何查询网站被搜狗收录,搜狗收录查询工具
- iPhone/iPad/Android UI尺寸规范
- 同余2:线性逆元和中国剩余定理的学习笔记
- GRASPIT安装流程
- R语言绘图中图片的组合(cowplot、patchwork宏包、layout、par()、gridExtra)
- Java反射系列--Type接口及其子接口
热门文章
- 【147天】尚学堂高淇Java300集视频精华笔记(108-109)
- MFC中的几个常用类——CFileDialog
- WEB平台架构之:LAMP(Linux+Apache+MySQL+PHP)
- python手机端给电脑端发送数据_期货交易软件有哪些比较好用?分手机端和电脑端...
- 程序员到底要不要重复造轮子?
- 7.Java常用开发工具
- 科普dip,dp,sp,dpi,ppi,px,Density
- android 双线程等待,在Java/Android中启动另一个线程之前如何等待线程完成?
- esp32 嵌入式linux,初体验乐鑫 ESP32 AT 指令-嵌入式系统-与非网
- miui游戏驱动程序偏好设置_米粉必看:小米官方教你如何关闭 MIUI 广告 - 小米,MIUI...