Hdu4155The Game of 31(DFS+博弈论)
来源:互联网 发布:网络分配器 编辑:程序博客网 时间:2024/06/04 20:05
The Game of 31
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 563 Accepted Submission(s): 268
Problem Description
The game of 31 was a favourite of con artists who rode the railroads in days of yore. The game is played with a deck of 24 cards: four labelled each of 1, 2, 3, 4, 5, 6. The cards in the deck are visible to both players, who alternately withdraw one card from the deck and place it on a pile. The object of the game is to be the last player to lay a card such that the sum of the cards in the pile does not exceed 31. Your task is to determine the eventual winner of a partially played game, assuming each player plays the remainder of the game using a perfect strategy.
For example, in the following game player B wins:
Player A plays 3
Player B plays 5
Player A plays 6
Player B plays 6
Player A plays 5
Player B plays 6
For example, in the following game player B wins:
Player A plays 3
Player B plays 5
Player A plays 6
Player B plays 6
Player A plays 5
Player B plays 6
Input
The input will consist of several lines; each line consists of a sequence of zero or more digits representing a partially completed game. The first digit is player A's move; the second player B's move; and so on. You are to complete the game using a perfect strategy for both players and to determine who wins.
Output
For each game, print a line consisting of the input, followed by a space, followed by A or B to indicate the eventual winner of the game.
Sample Input
356656356653566111126666552525
Sample Output
356656 B35665 B3566 A111126666 A552525 A
题意:一共有24张牌,面值分别为1,2,3,4,5,6.各有4枚。每次没人打出一张,第一个点数超过31算输。
刚开始我还以为1人1套牌。郁闷死我了,WR了半天。。。后来看了解题报告才知道是一起用的。直接DFS就行了,注意回朔就行。
#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <iostream>#include <cmath>#include <queue>#include <map>#include <stack>#include <list>#include <vector>using namespace std;#define LL __int64int a[10];int dp(int x){ if (x>31) return 0; for (int i=1;i<7;i++) { if (a[i] && i+x<=31) { a[i]--; if (dp(i+x)==0) { a[i]++; return 1; } a[i]++; } } return 0;}char s[50];int main(){ int l,i; while (~scanf("%s",&s)){getchar(); int l=strlen(s); for (i=1;i<=6;i++) a[i]=4; int ans=0; for (i=0;i<l;i++) { int k=s[i]-'0'; ans+=k; a[k]--; } ans=dp(ans); printf("%s",s); if (ans) printf(" %c\n",'A'+(l&1)); else printf(" %c\n",'A'+((l+1)&1)); } return 0;}
0 1
- Hdu4155The Game of 31(DFS+博弈论)
- ZOJ1827 HDU4155 The Game of 31,博弈论+爆搜
- hdu4155 The Game of 31------sg dfs
- 博弈论---Game!
- uva 12530 Game of Tiles (二分图完美匹配+博弈论)
- UVA 10891 Game of Sum (博弈论 + 区间dp)
- 博弈论 —— The Game of Parity ( CodeForces 549C )
- GYM 101128 G.Game of Cards(博弈论)
- GYM 101147 A.The game of Osho(博弈论)
- ZOJ 3964 Yet Another Game of Stones(博弈论)
- Game Theory 博弈论
- ZOJ2290 Game,博弈论
- Nim Game (博弈论)
- poj_1082_Calendar Game(博弈论)
- HDU 5011 Game(博弈论)
- hdu1856 Brave Game(博弈论)
- poj2234 Matches Game博弈论
- UVA 1548 - The Game of Master-Mind(dfs剪枝)
- 线段树(树型专线型)hdu4358
- acm暑假集训已经过半...
- gets strtok sscanf 实现读入一行并分割字符
- Tower of Cubes - UVa 10051 dp
- Ubuntu配置PPTP的VPN
- Hdu4155The Game of 31(DFS+博弈论)
- 韩语学习之第六课
- Array类及其重载的运算符
- 准备工作-用python绘制金融数据曲线的进阶实例
- git常用命令
- 突破IIS6上传文件尺寸限制
- [DFS序列+线段树维护区间标记]ZOJ3686 A Simple Tree Problem
- Intel 的AVX2指令集解读
- 和为S的两个数字