hdoj 1427 速算24点【经典dfs】
2016-04-04 16:35
316 查看
速算24点
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4240 Accepted Submission(s): 1042
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
Author
LL
Source
ACM暑期集训队练习赛(三)
Recommend
linle
Statistic | Submit | Discuss | Note
代码:
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; char a[5][5]; int num[10]; int vis[10]; int bian(char a) { if(a=='A') return 1; else if(a=='J') return 11; else if(a=='Q') return 12; else if(a=='K') return 13; else return a-'0'; } int dfs(int use,int tot) { if(use==4) { if(num[tot-1]==24) { return 1; } else { return 0; } } for(int i=0;i<tot-1;i++) { if(vis[i]) continue; vis[i]=1; for(int j=i+1;j<tot;j++) { if(vis[j]) continue; vis[j]=1; num[tot]=num[i]+num[j];if(dfs(use+1,tot+1)) return 1; num[tot]=num[i]-num[j];if(dfs(use+1,tot+1)) return 1; num[tot]=num[j]-num[i];if(dfs(use+1,tot+1)) return 1; num[tot]=num[i]*num[j];if(dfs(use+1,tot+1)) return 1; if(num[j]) { if(num[i]%num[j]==0) { num[tot]=num[i]/num[j];if(dfs(use+1,tot+1)) return 1; } } if(num[i]) { if(num[j]%num[i]==0) { num[tot]=num[j]/num[i];if(dfs(use+1,tot+1)) return 1; } } vis[j]=0; } vis[i]=0; } return 0; } int main() { while(scanf("%s%s%s%s",&a[0],&a[1],&a[2],&a[3])!=EOF) { for(int i=0;i<4;i++) { if(strlen(a[i])==2) { num[i]=10; } else { num[i]=bian(a[i][0]); } } memset(vis,0,sizeof(vis)); if(dfs(1,4)) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- 在js中模拟Java中的Map
- Hive分析窗口函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK
- 商品内容页上传图片失败
- POJ 2828 Buy Tickets (线段树 or 树状数组+二分)
- JVM垃圾回收(GC 笔记)
- 位运算符
- win7 64 安装mysql-python
- shell 中的for、while循环及if语句
- spring mvc 预习
- Transfrom
- linux spi驱动
- Unity3d push调查
- leetCode题解:AddDigits
- Matlab曲线绘制详解
- 安卓应用程序的签名
- 构造大数据时代国家安全战略
- stm32上NRF24L01无法通信的问题。。
- JAVA中的成员变量与局部变量
- lua面向对象封装及元表(metatable)性能测试
- java 访问权限控制