Hdoj 1427 速算24点 【DFS】
2015-04-25 00:03
148 查看
速算24点
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3574 Accepted Submission(s): 869
Problem Description
速算24点相信绝大多数人都玩过。就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不能出现小数。
Input
每组输入数据占一行,给定四张牌。
Output
每一组输入数据对应一行输出。如果有解则输出"Yes",无解则输出"No"。
Sample Input
A 2 3 6 3 3 8 8
Sample Output
Yes No
题意。。。。
就是模板
代码:
#include <iostream> #include <cstdio> #include <cstring> const int M = 50; int num[M]; bool vis[M]; int dfs(int n, int top){ if(n == 1){ if(24 == num[top-1]) return 1; return 0; } for(int i = 0; i < top; ++ i){ if(!vis[i]){ vis[i] = 1; for(int j = i+1; j < top; ++ j){ if(!vis[j]){ vis[j] = 1; num[top] = num[i]+num[j]; if(dfs(n-1, top+1)) return 1; num[top] = num[i]-num[j]; if(dfs(n-1, top+1)) return 1; num[top] = num[j]-num[i]; if(dfs(n-1, top+1)) return 1; num[top] = num[i]*num[j]; if(dfs(n-1, top+1)) return 1; if(num[j]&&num[i]%num[j] == 0){ num[top] = num[i]/num[j]; if(dfs(n-1, top+1)) return 1; } if(num[i]&&num[j]%num[i] == 0){ num[top] = num[j]/num[i]; if(dfs(n-1, top+1)) return 1; } vis[j] = 0; } } vis[i] = 0; } } return 0; } int main(){ int i = 0; char s[2]; while(scanf("%s", s) == 1){ if(s[0] >= '2'&&s[0] <= '9'){ num[i++] = s[0]-'0'; } else if(s[0] == 'A') num[i++] = 1; else if(s[0] == 'J') num[i++] = 11; else if(s[0] == 'Q') num[i++] = 12; else if(s[0] == '1') num[i++] = 10; else num[i++] = 13; int t = 3; while(t --){ scanf("%s", s); if(s[0] >= '2'&&s[0] <= '9'){ num[i++] = s[0]-'0'; } else if(s[0] == 'A') num[i++] = 1; else if(s[0] == 'J') num[i++] = 11; else if(s[0] == 'Q') num[i++] = 12; else if(s[0] == '1') num[i++] = 10; else num[i++] = 13; } memset(vis, 0, sizeof(vis)); if(dfs(4, 4)) puts("Yes"); else puts("No"); i = 0; } return 0; }
相关文章推荐
- hdoj 1427 速算24点 【经典DFS】
- hdoj 1427 速算24点【经典dfs】
- hdu 1427 速算24点(java,DFS,全排列)
- hdoj 1427 速算24点 【经典 dfs 】
- hdoj 1428 漫步校园 【bfs + dfs】
- HDOJ 5416 CRB and Tree DFS
- HDOJ 1044 BFS+DFS
- HDOJ1016 搜索题(DFS)
- HDOJ 1312 red & black(dfs)
- hdoj--1034--Hidden String(dfs)
- HDOJ 题目2209 翻纸牌游戏(dfs)
- HDOJ 题目1258 Sum It Up(DFS)
- hdoj-1242-Rescue(DFS)
- HDOJ1181变形课(DFS)
- hdoj 1181 变形课 【DFS】
- HDOJ2102 深搜DFS解法+剪枝优化 入门题
- HDOJ/HDU 1241 Oil Deposits(经典DFS)
- HDOJ(HDU).1045 Fire Net (DFS)
- HDOJ/HDU 1728 逃离迷宫 DFS 深度优先搜素
- 图论入门,连通图的深度优先遍历 dfs,HDOJ 1232 畅通工程