关于巴什博弈的简单介绍分析
来源:互联网 发布:qq三国79第一js万人敌 编辑:程序博客网 时间:2024/06/05 21:18
首先,先拿一个例题介绍一下巴什博弈。
http://acm.hdu.edu.cn/showproblem.php?pid=1846
像这样2人采用最优策略取石子的问题就是典型的巴什博弈的思想
假设一开始有n个石子那么n一定可以写成n=(m+1)*r+s的形式,既然这样的话,假如A先取,那么一开始A取走s个石子(s<m),之后B取走k个石子,所以说,假如A再取走m+1-k个石子,之后就剩余(m+1)*(r-1)个石子给B下一次取,也就是说如果不断取下去,最终该B取的时候还有(m+1)*1个石子,B不论拿走几个,A下一次都可以一次取完,所以说,当s=n%(m+1)中,s>0的时候,为A的必胜态
#include<stdio.h>#include<string.h>int main(){ int N,i; int m,n; scanf("%d",&N); for(i=1;i<=N;i++) { scanf("%d%d",&n,&m); if(n%(m+1)==0) printf("second\n"); else printf("first\n"); } return 0;}
下面再看这个题
http://acm.hdu.edu.cn/showproblem.php?pid=2149
这个题的话,和上一个大同小异
同的分析,如果一开始的话,A加价s,那么B加价k,我们只需要不断加(m+1-k)的话,我们所得的加个一直会是
(m+1)*r+s,当这个值为n的时候,我们就获胜了,所以说当s>0的时候是我们的必胜态,当然,这个题还有一种特殊的情况需要我们讨论,就是当m>n的时候
#include<stdio.h>int main(){ int m,n,s,i; while(scanf("%d%d",&n,&m)!=EOF) { if(n<=m) { for(i=n;i<=m;i++) { printf("%d",i); if(i<m) printf(" "); } } else if(n%(m+1)==0) printf("none"); else { printf("%d",n%(m+1)); } printf("\n"); } return 0;}
关于巴什博弈的题网上还有很多,也有很多变形,感兴趣的可以多看一看,很有意思的~ 0 0
- 关于巴什博弈的简单介绍分析
- 最简单的博弈 之 巴什博弈
- 简单巴什博弈
- 简单巴什博弈
- 简单博弈——巴什博弈
- 三种简单博弈问题的简单介绍
- zzuoj1225 棋盘游戏 最简单的博弈——巴什博弈(bash game)
- 杭电1846简单的巴什博弈
- BroadcastReceiver的简单分析介绍
- 博弈-巴什博弈
- 简单的拍卖博弈
- 关于JSValidation的简单介绍
- 关于Clojure的简单介绍
- 关于JS简单的介绍
- 关于keystore的简单介绍
- 关于线程的简单介绍
- 关于adodb的简单介绍
- 关于keystore的简单介绍
- javascript运行机制之执行顺序详解
- HTML5画布齿轮
- android换肤机制
- UML之构件图
- 输入外挂
- 关于巴什博弈的简单介绍分析
- 感谢轻贱、辱骂你的人
- MySQL Cluster集群探索与实践
- wstring与string互转
- 浪漫爱
- 峨眉上的两万级阶梯
- 由于本人不再从事Kinect相关的开发工作,有关与kniect的问题没有办法一一回答,本专辑不再更新。
- 第一篇博客
- 走台阶的方法