【HDU 1427 计算24点 DFS】
来源:互联网 发布:excel相关系数矩阵 编辑:程序博客网 时间:2024/06/05 09:58
【题目链接】:http://acm.hdu.edu.cn/showproblem.php?pid=1427
【题目描述】:
速算24点
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5213 Accepted Submission(s): 1343
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 63 3 8 8
Sample Output
YesNo
Author
LL
【思路】:DFS
【代码】:
/*****************************[HDU 1427 速算24点]Author:herongweiTime:2017/6/4 16:25language:C++http://blog.csdn.net/u013050857******************************/#include <bits/stdc++.h>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;const int maxn = 1e6+10;const int maxm = 55;const int POINT=24;const LL MOD = 999999997;inline LL read(){ int c=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();} return c*f;}int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int t,n,m,k,tp,ret,ans,ok;char p1[3],p2[3],p3[3],p4[3];int s1,s2,s3,s4;int a[maxn],b[maxn],c[maxn],vis[maxn],sum[maxn],num[4];int alpha_to_num(char p){ if(p=='A') return 1; if(p=='J') return 11; if(p=='Q') return 12; if(p=='K') return 13;}void dfs(int sum,int cur,int step){ if(ok) return; if(step==3){ if(sum-cur==POINT||sum+cur==POINT||sum*cur==POINT) ok=1; if(cur&&sum%cur==0&&sum/cur==POINT) ok=1; return; } dfs(sum+cur,num[step+1],step+1); dfs(sum-cur,num[step+1],step+1); dfs(sum*cur,num[step+1],step+1); if(cur&&sum%cur==0) dfs(sum/cur,num[step+1],step+1); dfs(sum,cur+num[step+1],step+1); dfs(sum,cur-num[step+1],step+1); dfs(sum,cur*num[step+1],step+1); if(num[step+1]&&cur%num[step+1]==0) dfs(sum,cur/num[step+1],step+1);}int main(){ freopen("in.txt","r",stdin); while(~scanf("%s %s %s %s",p1,p2,p3,p4)) { if(strlen(p1)==2) s1=10; else {if(isalpha(p1[0])) s1=alpha_to_num(p1[0]);else s1=p1[0]-'0';} if(strlen(p2)==2) s2=10; else {if(isalpha(p2[0])) s2=alpha_to_num(p2[0]);else s2=p2[0]-'0';} if(strlen(p3)==2) s3=10; else {if(isalpha(p3[0])) s3=alpha_to_num(p3[0]);else s3=p3[0]-'0';} if(strlen(p4)==2) s4=10; else {if(isalpha(p4[0])) s4=alpha_to_num(p4[0]);else s4=p4[0]-'0';} num[0]=s1;num[1]=s2;num[2]=s3;num[3]=s4; ok=0; sort(num,num+4); do{ dfs(num[0],num[1],1); }while(next_permutation(num,num+4)&&!ok); if(ok)puts("Yes"); else puts("No"); } return 0;}
阅读全文
0 0
- 【HDU 1427 计算24点 DFS】
- HDU 1427 速算24点 枚举+dfs
- [HDU 1427]速算24点(DFS暴搜)
- HDU ACM 1427 速算24点 [DFS]
- hdu 1427 24点暴力dfs
- HDU 1427 速算24点(DFS) *
- HDU 1427 速算24点(dfs)
- Hdoj 1427 速算24点 【DFS】
- hdoj 1427 速算24点 【经典DFS】
- hdoj 1427 速算24点 【经典 dfs 】
- hdoj 1427 速算24点【经典dfs】
- 24点 - DFS
- DFS-速算24点
- hdu 1427 dfs
- HDU-1427-速算24点
- HDU 1427 速算24点
- HDU:1427 速算24点
- HDU-1427 速算24点
- 【计算机视觉】全景相机标定(MATLAB/opencv)
- 关于凸优化的一些简单概念
- 2017上海金马五校程序设计竞赛 O:An Easy Problem
- 面试题29数组中出现次数超过一半的数字
- 使用jUnit4测试Spring4
- 【HDU 1427 计算24点 DFS】
- 两数之和
- 数据结构与算法之线性表(一)(笔记)
- 了解CSS属性font-kerning,font-smoothing,font-variant
- java:控制台输入方法
- 湫湫买火车票 最短路
- JS 小tips
- 【NGUI基础知识】——Scroll View(滚动视图)
- 正则表达式学习--python