[tyvj2802/RQNOJ74]算24点

描述

  几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”。您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算,要求运算结果等于24。 
  您可以使用的运算只有:+,-,*,/,您还可以使用()来改变运算顺序。注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(2*2)/4是合法的,2*(2/4)是不合法的)。下面我们给出一个游戏的具体例子: 
  若给出的4个操作数是:1、2、3、7,则一种可能的解答是1+2+3*7=24。计算过程: 
  2+1=3 
  7*3=21 
  21+3=24 
  本题不要求输出具体计算过程。

输入格式

  只有一行,四个1到9之间的自然数。

输出格式

  如果有解的话,只要输出“yes”。如果没有解则输出“no”。 
  注意:不要输出引号“”。

测试样例1

输入

1 2 3 7

输出

yes

 
 
 
试题分析:这道题看着简单,其实背后的反例要考虑周全。如:6 8 2 1:(6*8)/(2*1)=24
               针对这种情况,我们要怎么办呢?难道用两个DFS合并为一个答案?
               显然不是,只要用我们枚举到的a[i]/ans或a[i]-ans,a[i]*ans就可以了。(ans为当前DFS到的答案)
               为什么这样做呢?这样单纯的a[i]/ans,那么上面那种两个组合相除的情况怎么办?
               我们发现,当格式为上面的情况,我们只需要以8/(2*1)*6来DFS就好了
               那万一a/(b*c)除不尽怎么办?   用double就好了……当DFS到最后一个时,会把它乘回整数的
 
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
//#include<cmath> using namespace std;
const int INF = 9999999;
#define LL long long inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
int N,M;
int a[5];
char c;
bool vis[5];
bool t[5];
double sum[40];
bool aflag=false;
void dfs(int st,double ans){
if(st==4&&ans==24){
puts("yes");
aflag=true;
exit(0);
}
else if(st==4) return ;
for(int i=1;i<=4;i++) t[i]=vis[i];
for(int i=1;i<=4;i++){
int tmp=4,su=0;
if(vis[i]) continue;
vis[i]=true;
dfs(st+1,ans+a[i]);
dfs(st+1,ans-a[i]);
if(ans!=0) dfs(st+1,ans/a[i]);
if(ans!=0) dfs(st+1,ans*a[i]);
if(ans!=0&&a[i]>ans) dfs(st+1,a[i]/ans);
if(sum[i]>ans) dfs(st+1,a[i]-ans);
vis[i]=false;
}
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
for(int i=1;i<=4;i++){
cin>>c;
if(c=='A') a[i]=1;
else if(c=='J') a[i]=11;
else if(c=='Q') a[i]=12;
else if(c=='K') a[i]=13;
else a[i]=c-'0';
}
dfs(0,0);
if(!aflag) puts("no");
return 0;
}

  

【DFS】算24点的更多相关文章

  1. 24点游戏&&速算24点(dfs)

    24点游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  2. hdu 1427 速算24点 dfs暴力搜索

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem De ...

  3. HDU 1427 速算24点【数值型DFS】

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. hdu 1427 速算24点

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1427 速算24点 Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A( ...

  5. Hdu1427 速算24点 2017-01-18 17:26 46人阅读 评论(0) 收藏

    速算24点 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submiss ...

  6. HDU 1427 速算24点 (深搜)

    题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...

  7. 洛谷【P1236】算24点

    我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  8. 洛谷P1236 算24点

    题目描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算, ...

  9. 洛谷 P1236 算24点

    题目描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为"算24点".您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数 ...

随机推荐

  1. 基本控件文档-UILabel属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址   //转载请注明出处--本文永久链接:http://www.cnblogs.com/ ...

  2. poj 2253 Frogger (dijkstra最短路)

    题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  3. 灵活使用ARM汇编的WEAK关键字

    //=====================================================================//TITLE://    灵活使用ARM汇编的WEAK关 ...

  4. python之提速千倍爆破一句话

    看了一下冰河大佬写的文章特别有感:https://bbs.ichunqiu.com/thread-16952-1-1.html 简单描述一下: 利用传统的单数据提交模式. 比如下面这个一句话木马: & ...

  5. Python模块学习 - click

    Click模块 click模块是Flask的作者开发的一个第三方模块,用于快速创建命令行.它的作用与Python标准库的argparse相同,但是,使用起来更简单. click是一个第三方库,因此使用 ...

  6. iOS WKWebView ios9以上版本配置 与 设置UserAgent(用户代理), 解决点击web, 客户端接收不到web事件问题

    项目运行在ios9上需要在info.plist文件中配置加入如下信息, App Transport Security Settings Allow Arbitrary Loads = YES < ...

  7. C基础 工程中常用的排序

    引言 - 从最简单的插入排序开始 很久很久以前, 也许都曾学过那些常用的排序算法. 那时候觉得计算机算法还是有点像数学. 可是脑海里常思考同类问题, 那有什么用呢(屌丝实践派对装逼学院派的深情鄙视). ...

  8. python一步高级编程

    1.==,is的使用 总结 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等. 2.深拷贝.浅拷贝 1.浅拷贝 浅拷贝是对于一个对象的顶层拷贝 通俗的理解是:拷贝了 ...

  9. 微信小程序实现图片上传,预览,删除

    wxml: <view class='imgBox'> <image class='imgList' wx:for="{{imgs}}" wx:for-item= ...

  10. 利用h5,chart.js监测手机三轴加速度,用以研究计步算法等

    用window.DeviceMotionEvent来判断手机浏览器是否支持访问硬件资源,window.addEventListener('devicemotion',deviceMotionHandl ...