首页 > 其他 > 详细

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

时间:2014-09-15 21:22:39      阅读:318      评论:0      收藏:0      [点我收藏+]

题目地址:HDU 1847

这题可以用NP状态转换。

首先0的时候就代表无法出牌了,所以是必败态。然后根据每一个可以一步到达必败态的是必胜态,不可以一步到达必败态的是必败态。可以推出状态转移方程,然后用DP求解。即从已知状态向未知状态转移,就是从小的向大的转移,假如它的下一步没有必败态,则它是必败态,若下一步有一个必败态,那它就是必胜态。

代码如下:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm>

using namespace std;
int dp[2000], a[100];
int main()
{
    int n, i, j, m, flag;
    a[0]=1;
    for(i=1;; i++)
    {
        a[i]=a[i-1]*2;
        if(a[i]>1000)
        {
            m=i;
            break;
        }
    }
    dp[0]=0;
    for(i=1;i<=1000;i++)
    {
        flag=0;
        for(j=0;j<m;j++)
        {
            if(a[j]>i)
                break;
            if(!dp[i-a[j]])
            {
                flag=1;
                break;
            }
        }
        if(flag)
            dp[i]=1;
        else
            dp[i]=0;
    }
    while(scanf("%d",&n)!=EOF)
    {
        if(dp[n])
            puts("Kiki");
        else
            puts("Cici");
    }
    return 0;
}


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

原文:http://blog.csdn.net/scf0920/article/details/39297245

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!