频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
HDOJ 4155 The Game of 31 博弈搜索
2012-09-22 09:59:38           
收藏   我要投稿
[cpp]
//HDOJ 4155 The Game of 31 博弈搜索 
/*
题意:有编号为1、2、3、4、5、6的牌各4张,共24张,两个人轮流取牌,
      取牌后要使所有取出的牌的总不超过31,不能取的输。
      游戏从给定的局面开始。
 
思路:从给定的局面开始dfs,当此状态能够到达p状态,则此状态有n状态
      否则为p状态,然后判断此时是先手还是后手
*/ 
 
#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
 
#define N 100 
#define M 10 
 
char str[N]; 
int num[M]; 
int len,sum; 
 
void init(){ 
    int i; 
    for(i = 1; i <= 6; ++i) 
        num[i] = 4; 
    len = strlen(str); 
    sum = 0; 
    for(i = 0; i < len; ++i){ 
        --num[str[i]-'0']; 
        sum += str[i]-'0'; 
    } 

 
bool dfs(int sum){ 
    int i; 
    if(sum > 31) 
        return 0; 
    for(i = 1; i <= 6; ++i){ 
        if(num[i] && sum+i<=31){ 
            --num[i]; 
            if(dfs(sum+i) == 0){ 
                ++num[i]; 
                return 1; 
            } 
            ++num[i]; 
        } 
    } 
    return 0; 

 
int main(){ 
    while(scanf("%s",&str)!=EOF){ 
        init(); 
        printf("%s ",str); 
        if(dfs(sum)) 
            puts(len%2 ? "B" : "A"); 
        else  www.2cto.com
            puts(len%2 ? "A" : "B"); 
    } 
    return 0; 

点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇: HDOJ 1524 A Chess Game SG函数
下一篇:HDOJ 4203 Doubloon Game 博弈 找规律
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站