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

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

    unity导出的文件中经常会出现带有空格的节点或者文件夹 而这些空格在本地开发测试过程中不会出现,当这些带有空格路径的文件需要放到网络上时,就出现问题了 所以这里写了一个简单的查找并清理空格的插件, ...

  2. 【MySQL 基础】MySQL必知必会

    MySQL必知必会 简介 <MySQL必知必会>的学习笔记和总结. 书籍链接 了解SQL 数据库基础 什么是数据库 数据库(database):保存有组织的数据的容器(通常是一个文 件或一 ...

  3. 【JavaWeb】JSTL 标签库

    JSTL 标签库 简介 JSTL(JSP Standard Tag Library),即 JSP 标准标签库.标签库是为了替换代码脚本,使得整个 jsp 页面变得更加简洁. JSTL 有五个功能不同的 ...

  4. LeetCode237 删除链表中的节点

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...

  5. docker logs 查看容器日志操作

    查看日志 官方文档:https://docs.docker.com/engine/reference/commandline/logs/ # 查看指定数量的实时日志 # docker logs -tf ...

  6. ctfhub技能树—sql注入—整数型注入

    打开靶机 查看页面信息 查看回显位 查询数据库名 查询表名 查询字段 查询字段信息 使用sqlmap食用效果更佳 查数据库名 python2 sqlmap.py -u http://challenge ...

  7. 面试时通过volatile关键字,全面展示线程内存模型的能力

    面试时,面试官经常会通过volatile关键字来考核候选人在多线程方面的能力,一旦被问题此类问题,大家可以通过如下的步骤全面这方面的能力.     1 首先通过内存模型说明volatile关键字的作用 ...

  8. 大数据系列1:一文初识Hdfs

    最近有位同事经常问一些Hadoop的东西,特别是Hdfs的一些细节,有些记得不清楚,所以趁机整理一波. 会按下面的大纲进行整理: 简单介绍Hdfs 简单介绍Hdfs读写流程 介绍Hdfs HA实现方式 ...

  9. python(re正则)

    import re #导入模块   info = 'qwewwer12332423kdsjfkl2342kdjfl213nkafal123123' 例1: res1 = re.compile('er( ...

  10. Maven 依赖机制

    概述 在 Maven 依赖机制的帮助下自动下载所有必需的依赖库,并保持版本升级.让我们看一个案例研究,以了解它是如何工作的.假设你想使用 Log4j 作为项目的日志.这里你要做什么? 传统方式 访问 ...