P/N理论

分析博弈时可以用P/N分析法

具体如下:

P点:即必败点,某玩家位于此点,只要对方无失误,则必败;

N点:即必胜点,某玩家位于此点,只要自己无失误,则必胜。

必败态:一定输

必胜态:一定赢

奇异局势:必败态局势

非奇异局势:必胜态局势

P/N点满足三个定理:

  1. 所有终结点都是必败点P(游戏中,轮到谁拿牌,还剩0张牌的时候,此人就输了,因为无牌可取)(游戏规则特殊的不考虑);
  2. 所有一步能走到必败点P的就是N点;
  3. 通过一步操作只能到N点的就是P点;

如最简单的巴什博弈中的取石子问题,假设每个人最多取3个,共9个:

0为必败点P,1,2,3可以通过取1,2,3个得到0这个必败点,于是1,2,3是N必胜点,而4不可以通过取1,2,3得到必败点,所以4是新的必败点。

以此类推,可以列一张0到8的表(这可以帮我们理解)

0 1 2 3 4 5 6 7 8 9
P N N N P N N N P N

我们一开始拿1个,让对手进入必败态(奇异局势),就可以赢。

但具体题目中,我们用8 % (3 + 1) != 0

理论补充:对于奇异局势你一定能把它变成非奇异局势,一定不能把它变成奇异局势(不然你就一直赢了);

对于非奇异局势,你可以通过才智把它变成奇异局势,也能变成非奇异局势

看题目吧,少年!

基础博弈变形

假设有13个石子,双方可以取1,3,4个,你先取,问怎样才能稳赢?

我们可以先列一张表

0 1 2 3 4 5 6 7 8 9 10 11 12 13
P N P N N N N P N P N N N N

从表中可以看出,你要先取4个,让对手达到必败态 。

要判断是否是奇异局势也很简单:13%(2+(4+1))!=0或13%(2+(4+1))!=2即可

水几题吧!!!

先自己做做吧。(我就不做超链接了)

hdu1847

hdu2188

hdu3863


hdu1847

哈哈,分析后,3的倍数为必败-。-

#include<stdio.h>
int main()
{
int n;
while(scanf("%d", &n)==1)
{
if (n % 3 == 0)
printf("Cici\n");
else
printf("Kiki\n");
}
return 0;
}

hdu2188

水水水。。。

#include<stdio.h>
int main()
{
int n,a,b;
while (scanf("%d", &n) ==1)
{
while (n--)
{
scanf("%d%d", &a, &b);
if (a > b&&a%(b+1)==0)
printf("Rabbit\n");
else
printf("Grass\n");
}
}
return 0;
}

hdu3863

先手必胜

#include<stdio.h>
int main()
{
long int n;
while (scanf("%ld", &n) ==1&&n!=-1)
{
printf("I bet on Oregon Maple~\n");
}
return 0;
}

acm--博弈入门2(P/N分析)--(HDU 1847 HDU 2188 HDU 3863)的更多相关文章

  1. 【转】ACM博弈知识汇总

    博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍 ...

  2. ACM博弈知识汇总(转)

    博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻 ...

  3. HDU.1847 Good Luck in CET-4 Everybody! ( 博弈论 SG分析)

    HDU.1847 Good Luck in CET-4 Everybody! ( 博弈论 SG分析) 题意分析 简单的SG分析 题意分析 简单的nim 博弈 博弈论快速入门 代码总览 //#inclu ...

  4. hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)

    Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...

  5. HDU 1847 Good Luck in CET-4 Everybody! (巴什博弈)

    题目链接:HDU 1847 Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此. ...

  6. HDU 1847 Good Luck in CET-4 Everybody!(规律,博弈)

    Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  7. HDU 1847 Good Luck in CET-4 Everybody! (博弈)

    题意:不用说了吧,都是中文的. 析:虽说这是一个博弈的题,但是也很简单的,在说这个题目前我们先说一下巴什博弈定理. 巴什博弈定理:一堆物品有n个,有两个人(两个人足够聪明)轮流取,规定每次至少取一个, ...

  8. HDOJ 1846 Brave Game - 博弈入门

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1846 经典基础博弈,首先面对(m+1)的人一定会输,依次往后推即可: #include<iost ...

  9. ACM 博弈(难)题练习 (第一弹)

    第二弹: 套路&&经验总结: 1. N堆***的游戏,一般可以打表找SG函数的规律.比如CodeForces 603C 2.看起来是单轮的游戏,实际上可能拆分成一些独立的子游戏.比如C ...

随机推荐

  1. 20165206 2017-2018-2 《Java程序设计》第七周学习总结

    20165206 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 MySqL:是世界上最流行的开源数据管理系统. 配置启动MySQL. 连接数据库:Conne ...

  2. salt 执行shell 脚本 修改名字

    #!/bin/bash #命令 匹配主机 执行模块 脚本路径,必须放在salt目录下 源主机名 修改的主机名 #salt tt_LD_LM_LC_1 cmd.script salt://init/re ...

  3. C#黎明前的黑暗

    学习编程已经很久了,然而技术还停留在远古时代,丝毫没有什么进步的痕迹,平常也就写一些小软件来处理工作上面遇到的一些很繁杂的问题,天生愚笨或许就是说的我. 黎明前的黑暗期,真的太长了,烂烂的文章就像烂烂 ...

  4. Win8.1 查看 “Windows 体验指数“

    啥是 Windows 体验指数 ? 引用MS的介绍: http://windows.microsoft.com/zh-cn/windows7/products/features/windows-exp ...

  5. mysql的下载与安装

    官网 下载 https://www.mysql.com/ 依次点击:downloads>community>mysql community server,如图所示   image.png ...

  6. codeforces 1037

    题解: E-trips 哎哎哎好傻逼啊 没有想到算不能的一直在想怎么算能的 太傻逼了 其实很简单 我们只需要对好友<=k的首先dfs一下给他连接着的朋友-1 然后如果小于了就递归下去 这个正确性 ...

  7. 【bzoj1264】[AHOI2006]基因匹配Match 树状数组

    题解: 一道比较简单的题目 容易发现状态数只有5*n个 而转移需要满足i1<i2;j1<j2 那么很明显是二维平面数点 暴力一点就是二维树状数组+map 5nlog^3 比较卡常 但是注意 ...

  8. Dapper Helper

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  9. 一起学Hive——使用MSCK命令修复Hive分区

    最近在使用Hive的过程中,在备份数据时,经常会使用cp或mv命令来拷贝数据,将数据拷贝到我们新建备份表的目录下面,如果不是分区表,则上面的操作之后,新建的备份表可以正常使用,但是如果是分区表的,一般 ...

  10. 学习Spring必须了解的基础知识——回调机制

    上面这张图如果能看得懂就能理解什么是回调机制: A对象在调用a()方法时会调用B对象的b()方法,b()方法必须能调用A对象的callback()方法. 谁白了:a()方法有B对象b()方法的引用,b ...