题目大意

给你四个数字,问你能否经过加减乘除使其结果为24


解题思路

先暴力枚举四个数字的全排列,然后枚举运算符和括号


代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int t, ans, p[10], ss[10], s[10], v[10];
void dfs2(int x)
{if (!x){if (s[1] == 24) ans = 1;return;}int g[10], gg[10];for (int i = 1; i <= x; ++i)g[i] = s[i], gg[i] = v[i];for (int i = 1; i <= x; ++i)//枚举括号,就是枚举先算哪个运算符{if (v[i] == 1) s[i] += s[i + 1];else if (v[i] == 2) s[i] -= s[i + 1];else if (v[i] == 3) s[i] *= s[i + 1];else if (!s[i + 1]) continue;//除数不为0else if (s[i] % s[i + 1]) continue;//只能整除else s[i] /= s[i + 1];for (int j = i + 1; j <= x; ++j)s[j] = s[j + 1], v[j - 1] = v[j];//把后面的往前移dfs2(x - 1);if (ans) return;for (int j = 1; j <= x; ++j)//回溯s[j] = g[j], v[j] = gg[j];}
}
void dfs1(int x)
{if (x == 4){dfs2(3);return;}for (int i = 1; i <= 4; ++i)//枚举符号{v[x] = i;dfs1(x + 1);if (ans) return;}
}
void dfs3(int x)
{if (x > 4){dfs1(1);return;}for (int i = 1; i <= 4; ++i)//枚举全排列if (!p[i]){s[x] = ss[i];p[i] = 1;dfs3(x + 1);p[i] = 0;}
}
int main()
{scanf("%d", &t);while(t--){scanf("%d%d%d%d", &ss[1], &ss[2], &ss[3], &ss[4]);ans = 0;dfs3(1);printf("%d\n", ans);}return 0;
}

【dfs】益智游戏(2017 特长生 T2)相关推荐

  1. NOIP 2017 Day1 T2 时间复杂度 complexity - 模拟题 题解

    作者@豪哒哒哒HaoDaDaDa 转载自简书@豪哒哒哒HaoDaDaDa-简书-NOIP 2017 Day1 T2 时间复杂度 (有一个月没有写简书了-) (这次终于开始拿Markdown写了,富文本 ...

  2. 【dfs】【hash】有趣的英语角(2015特长生 T2/luogu 1019)

    正题 luogu 1019 题目大意 给你若干个词语,让你把他们连起来(重复段叠在一起),每个词语最多用两次,问你该串最长是多少 解题思路 dfs枚举一个单词后面接哪个单词,然后枚举重叠长度,再用ha ...

  3. 裁缝师(2011特长生 T2)

    题目大意 给你一个N×M的布,你可以将最多L块布同时剪一刀,问你把他全部剪成1×1的最少要多少刀 解题思路#1 直接从中间剪,然后dfs求出一个图,然后每次找L个点去跑 代码#1 #include&l ...

  4. 【区间DP】摆渡线路(2017 特长生 T4)

    题目大意 给出一个园,圆上有100个点,若干条弦,让你选择尽量多互不相交的弦(点可以重合) 解题思路 可以把圆展开成链,然后复制一遍 设fi,jf_{i,j}fi,j​为第i个位置到第j个位置的所选弦 ...

  5. 模拟赛20200228(yyq)【右链+dfs序,子树管辖,聚集水流问题】

    T1:管理 对998244853998244{\color{red}{8}}53998244853取模 题解: 知道至少要多少还是不好做,能不能把它转化成暂时只计算这么多个呢? 是可以的,因为在一棵树 ...

  6. 【图论专题】最小生成树的扩展应用

    整理的算法模板合集: ACM模板 最小生成树的扩展应用 能用kruskal打死不用prim kruskal是要把所有的边都遍历一遍 图论中的超级源点就比较常用,要时刻想到它 题目列表: 题目 算法 A ...

  7. 最小生成树(kruskal、prim、最小生成森林问题、严格次小生成树)

    整理的算法模板合集: ACM模板 目录 一.kruskal算法 二.prim算法 三.Boruvka算法 四.生成森林问题(K颗树) 五.最小生成树的唯一性 六.严格次小生成树 LCA优化的次小生成树 ...

  8. 617. 合并二叉树

    给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 ...

  9. leetcode hot100(第一部分) + python(c++)

    1-1.两数之和 思路1:两层for循环 O(n2) class Solution:def twoSum(self, nums, target):res = []for i in range(len( ...

最新文章

  1. [sh]top添加到crontab不生效问题解决
  2. 【Spark Summit East 2017】BigDL:Spark上的分布式深度学习库
  3. idea 添加静态注释和live Templates
  4. RGB 转 YUV 算法
  5. pythonjson实例_python:JSON的两种常用编解码方式实例解析
  6. java解析简历_java:解析word文档(前程无忧简历),最好有代码案例?poi或者jacob解析都可以,有jar资源,求急。感谢...
  7. php curl post 下载文件,Curl提交POST请求到一个网址 如何获取返回的文件名
  8. 一波黑科技即将袭来!StarVR带你感受他们的未来
  9. linux上samba+本地yum源最简单的配置
  10. PHP最常用的2种设计模式工厂模式和单例模式
  11. IntelliJ Idea14 创建Maven多模块项目,多继承,热部署配置总结(一)
  12. Python技能树测评之改进建议
  13. 在vc中实现获取汉字拼音的首字母
  14. 十六进制颜色与RGB颜色对照表
  15. Gradient Boosting算法简介(有python列子)
  16. 显示器最大分辨率测试软件,在线检测显示器分辨率
  17. transformation-matrix
  18. 统计学习方法 - 绪论部分
  19. 【操作系统】实验三 进程调度模拟程序
  20. wpa_supplicant源码理解

热门文章

  1. python frame用法_python—dataframe用法
  2. self php语法,PHP代码审计之关于PHP_SELF的简单利用
  3. mysql 5.5 免安装_mysql 5.5.56免安装版配置方法
  4. C++类对象作为类成员
  5. 广东省计算机媒体大赛,广东省大学生计算机设计大赛
  6. 对表头指针、表头结点,单链表删除的理解
  7. P1447 [NOI2010]能量采集(mobius反演)
  8. Educational Codeforces Round 108 (Rated for Div. 2) D. Maximum Sum of Products 思维 + dp
  9. 【CTSC2010】珠宝商【后缀自动机】【点分治】【根号分治】
  10. Almost Sorted Array HDU - 5532