zoukankan      html  css  js  c++  java
  • acm--博弈入门2(P/N分析)--(HDU 1847 HDU 2188 HDU 3863)

    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
    ");
    		else
    			printf("Kiki
    ");
    	}
    	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
    ");
    			else
    				printf("Grass
    ");
    		}
    	}
    	return 0;
    }
    

    hdu3863
    先手必胜

    #include<stdio.h>
    int main()
    {
    	long int n;
    	while (scanf("%ld", &n) ==1&&n!=-1)
    	{
    			printf("I bet on Oregon Maple~
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    dubbo踩坑
    windows下面使用protobuf
    解决端口占用的问题
    建设检验
    统计学资料整理
    java cpu 负载高分析
    演讲/汇报
    管理和领导
    css渐变动画
    vue组件之间互相传值:父传子,子传父
  • 原文地址:https://www.cnblogs.com/juicebox/p/7529242.html
Copyright © 2011-2022 走看看