最开始我想的是全排列+枚举符号和括号的方法,但是我自己倒腾了很久还是打不对,只好向他人请教。
正解很机智——直接随意将几个数“捆绑”在一起,值存在其中一个数上,其他数标记不可再选,直到只剩下一个数,再判断这个数是否为24。

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 using namespace std;
7
8 const double eps=0.00000001;
9 double a[4];
10 int v[4];
11
12 double mabs(double x)
13 { return x>0?x:-x; }
14
15 int dfs(int x)
16 {
17 if (x==3)
18 {
19 for (int i=0;i<4;i++)
20 if (!v[i] && mabs(a[i]-24.0)<eps) return 1;
21 return 0;
22 }
23 /*for (int i=0;i<4;i++)
24 if (!v[i])
25 for (int j=0;j<4;j++)
26 if (!v[j]&&i!=j)
27 {
28 v[j]=1;
29 double tmp=a[i],tmpp=a[j];
30
31 a[i]=tmp+tmpp;
32 if (dfs(x+1)) return 1;
33 a[i]=tmp-tmpp;
34 if (dfs(x+1)) return 1;
35 a[i]=tmpp*tmp;
36 if (dfs(x+1)) return 1;
37 a[i]=tmpp/tmp;
38 if (dfs(x+1)) return 1;
39
40 a[i]=tmp;
41 v[j]=0;
42 }*///244ms
43 for (int i=0;i<4;i++)
44 if (!v[i])
45 for (int j=i+1;j<4;j++)//区别
46 if (!v[j])
47 {
48 v[j]=1;
49 double tmp=a[i],tmpp=a[j];
50
51 a[i]=tmp+tmpp;
52 if (dfs(x+1)) return 1;
53 a[i]=tmp-tmpp;
54 if (dfs(x+1)) return 1;
55 a[i]=tmpp-tmp;//
56 if (dfs(x+1)) return 1;
57 a[i]=tmpp*tmp;
58 if (dfs(x+1)) return 1;
59 a[i]=tmpp/tmp;
60 if (dfs(x+1)) return 1;
61 a[i]=tmp/tmpp;//
62 if (dfs(x+1)) return 1;
63
64 a[i]=tmp;
65 v[j]=0;
66 }//102ms
67 return 0;
68 }
69
70 int main()
71 {
72 while (1)
73 {
74 for (int i=0;i<4;i++) scanf("%lf",&a[i]);
75 if (!a[0]) break;
76 memset(v,0,sizeof(v));
77 if (dfs(0)) printf("YES\n");
78 else printf("NO\n");
79 }
80 return 0;
81 }

【noi 2.5_1789】算24(dfs)的更多相关文章

  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. 【DFS】算24点

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

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

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

  5. hdu 1427 速算24点

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

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

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

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

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

  8. 洛谷【P1236】算24点

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

  9. 洛谷P1236 算24点

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

  10. 洛谷 P1236 算24点

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

随机推荐

  1. 【Java基础】异常处理

    异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...

  2. 基于SVM的字母验证码识别

    基于SVM的字母验证码识别 摘要 本文研究的问题是包含数字和字母的字符验证码的识别.我们采用的是传统的字符分割识别方法,首先将图像中的字符分割出来,然后再对单字符进行识别.首先通过图像的初步去噪.滤波 ...

  3. APPIUM-Android自动化元素定位方式

    一.常用元素定位方法 appium从selenium中继承了所有的元素定位方法, 并且增加了一些自己的元素定位方式,下方截图分别为selenium和MobileBy包源码: 但是从继承selenium ...

  4. scaffoldingTools

    脚手架工具 脚手架工具概要(前端工程化的发起者) 脚手架的本质作用:创建项目基础架构.提供项目规范和约定 相同的组织结构 相同的开发规范 相同的模块依赖 相同的工具配置 相同的基础代码 举例:IDE创 ...

  5. kubernets之namespace

    一 命名空间的介绍以及作用 1  概念 为了方便不同部门之间对kubernets集群的使用,并且对其进行有效的隔离,kubernets提供了一种资源隔离手段,通过将各种不同资源分组到 一个区域,并且统 ...

  6. LeetCode897. 递增顺序查找树

    题目 法一.自己 1 class Solution { 2 public: 3 vector<int>res; 4 TreeNode* increasingBST(TreeNode* ro ...

  7. 【译】Async/Await(三)——Aysnc/Await模式

    原文标题:Async/Await 原文链接:https://os.phil-opp.com/async-await/#multitasking 公众号: Rust 碎碎念 翻译 by: Praying ...

  8. 关于SQL Server 镜像数据库快照的创建及使用

    从SQL Server 2005 SP 起,SQL 开始支持数据库镜像.它的设计目的是试图为SQL Server 提供一个具有实时性数据同步的灾难恢复技术,即能够提供数据冗余备份,切换起来比较方便.每 ...

  9. ElasticSearch Python 基本操作

    创建索引 from elasticsearch import Elasticsearch es = Elasticsearch('192.168.149.96:9200') mappings = { ...

  10. ElasticSearch-命令行客户端操作

    1.引言 实际开发中,主要有三种方式可以作为elasticsearch服务的客户端: 第一种,elasticsearch-head插件(可视化工具) 第二种,使用elasticsearch提供的Res ...