我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html

题目传送门:https://www.luogu.org/problemnew/show/P1236

算\(24\)点应该是大家耳熟能详的游戏了……

这题\(SPJ\),要求把两个要运算的数字较大的放在前面输出……

然后爆搜数字顺序和运算符就可以了……

真~暴力美学

时间复杂度:\(O(4!*4^3)\)

空间复杂度:\(O(n)\)

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; bool bo[5];
int a[5],sta[5],sign[4],fake[5]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} void print() {
int sum=sta[1];
for(int i=2;i<=4;i++) {
if(sum<sta[i])swap(sum,sta[i]);
if(sign[i-1]==1)printf("%d+%d=%d\n",sum,sta[i],sum+sta[i]),sum+=sta[i];
if(sign[i-1]==2)printf("%d-%d=%d\n",sum,sta[i],sum-sta[i]),sum-=sta[i];
if(sign[i-1]==3)printf("%d*%d=%d\n",sum,sta[i],sum*sta[i]),sum*=sta[i];
if(sign[i-1]==4)printf("%d/%d=%d\n",sum,sta[i],sum/sta[i]),sum/=sta[i];
}
}//输出 void check() {
memcpy(fake,sta,sizeof(fake));
int now=fake[1];
for(int i=2;i<=4;i++) {
if(now<fake[i])swap(now,fake[i]);//记得要把大的数字放在前面判
if(sign[i-1]==1)now=now+fake[i];
if(sign[i-1]==2)now=now-fake[i];
if(sign[i-1]==3)now=now*fake[i];
if(sign[i-1]==4) {
if(fake[i]==0)return;
if(now%fake[i])return;
now/=fake[i];
}
}
if(now==24) {print();exit(0);}
}//判断是否可以算出24 void make_sign(int id) {
if(id==3) {check();return;}
for(int i=1;i<=4;i++)
sign[id+1]=i,make_sign(id+1);
}//搜完运算符就判是否可行 void dfs(int id) {
if(id==4) {
for(int i=1;i<=4;i++)
sign[1]=i,make_sign(1);
return;
}//搜完数字搜运算符
for(int i=1;i<=4;i++)
if(!bo[i]) {
bo[i]=1,sta[id+1]=a[i];
dfs(id+1);
bo[i]=0;
}//爆搜数字
} int main() {
a[1]=read(),a[2]=read();
a[3]=read(),a[4]=read();//读入四个数
for(int i=1;i<=4;i++) {
bo[i]=1;sta[1]=a[i];
dfs(1);
bo[i]=0;//爆搜
}puts("No answer!");//如果爆搜出不了结果就No answer!
return 0;
}

洛谷【P1236】算24点的更多相关文章

  1. 洛谷P1236 算24点

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

  2. 洛谷 P1236 算24点

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

  3. 题解 洛谷P1236 【算24点】

    不得不说,个人认为许多大佬们把程序想复杂了,所以码量很长,但是实际上这题并不要这么复杂... 可以考虑用一个\(dfs\)维护一个状态\(f(n)[a_1,a_2--a_n]\) 接下来我们暴力枚举两 ...

  4. P1236 算24点

    #include <bits/stdc++.h> using namespace std; int b[4]; int a[3]; int calc(int a, int b, int c ...

  5. [洛谷P3254] [网络流24题] 圆桌游戏

    Description 假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为ri (i =1,2,--,m). 会议餐厅共有n 张餐桌,每张餐桌可容纳ci (i =1,2,--,n) ...

  6. [洛谷P4012] [网络流24题] 深海机器人问题

    Description 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生 ...

  7. 洛谷 P1957 口算练习题

    洛谷 P1957 口算练习题 题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习. 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效 ...

  8. 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...

  9. 洛谷 P2763 试题库问题(网络流24题之一)

    题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...

随机推荐

  1. Angular中的$cacheFactory的作用和用法

    1.Angular中的$cacheFactory的作用:    (1)put(key,value); 在缓存对象中插入一个键值对(key,value). (2)get(key); 在缓存对象中通过指定 ...

  2. 让intellij挂在异常处,特别是出现null pointer的地方

    1 在Intellij中设置java exception breakpoint 在调试模式下,run->view breakpoints 在java exception breakpoints- ...

  3. HealthKit详解

    1. 导入HealthKit框架 #import <HealthKit/HealthKit.h> 2. 判断设备是否支持HealthKit HealthKit是iOS8加入的API Hea ...

  4. 在vi或vim上查找字符串

    从开头搜索 在命令模式下,输入/你要查找的字符 按下回车,可以看到vim把光标移动到该字符处 再按n(小写)查看下一个匹配 按N(大写)查看上一个匹配, capslock切换大小写,也可以在小写状态下 ...

  5. Python基础(1)_python介绍、简单运算符

    Python执行一个程序分为三个阶段 阶段一:先启动python解释器 阶段二:python解释器把硬盘中的文件读入到内存中 阶段三:python解释器解释执行刚刚读入内存的代码 二.编程语言的分类: ...

  6. ll指令输出解析

    从左到右: 文件属性 共有10-11位,分别表示: 1.表示目标属性,d目录,l连结文件,-文件 2-4,owner权限,顺序为: r可读.w可写.x可执行,例如: rwx可读写执行,rw-可读写不能 ...

  7. vue双向绑定补充说明方法

    本文总结自: https://segmentfault.com/a/1190000006599500,将每一个流程提炼出来做一个简单的说明,以免自己被繁杂的逻辑弄昏头脑~ observer: 遍历数据 ...

  8. android OTA升级包制作【转】

    本文转载自:http://www.thinksaas.cn/topics/0/445/445670.html 0.签名 java -Xmx2048m -jar out/host/linux-x86/f ...

  9. 斐波那契 (Fibonacci)数列

    尾递归会将本次方法的结果计算出来,直接传递给下个方法.效率很快. 一般的递归,在本次方法结果还没出来的时候,就调用了下次的递归, 而程序就要将部分的结果保存在内存中,直到后面的方法结束,再返回来计算. ...

  10. 使用jQuery为博客生成目录

    这段代码展示了如何为div#content中的内容生成目录,也无非是对h系列标记进行解析.当然,也早有一些人实现了.​1. [代码][HTML]代码     <html>    <h ...