我对状态空间的理解: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. devexpress gridcontrol如何遍历每一行

    List<Medicine> medicinelist = new List<Medicine>(); foreach (GridViewRow row in GridView ...

  2. 监控httpd的shell脚本

    #!/bin/bash # Apache httpd进程监控shell # 如果你在使用RHEL / CentOS / Fedora Linux,使用这个重启命令 RESTART="/sbi ...

  3. vue v-on命令

    <!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a>   <!-- 提交事件不再重载页面 ...

  4. 【python】-- socketserver

    socketserver SocketServer服务端内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求.即:每个客户端请求连接到服务器时,Socket服务端 ...

  5. JS表单提交

    测试一: function submit(){var form1=document.getElementById("form1")form1.action="/manag ...

  6. 我的Android进阶之旅------>HTTP Header 详解

    HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应.就整个网络资源传 ...

  7. Power Designer体验之旅

    版权声明:本文为博主原创文章.未经博主允许不得转载. https://blog.csdn.net/wang13667539325/article/details/36025245 从某种程度上说.不论 ...

  8. C#练习委托、事件、事件处理

    控制台应用程序效果: 代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  9. location记录<18.7.21>

    // var index = location.href; // console.log(index) // // indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. // v ...

  10. Delphi 运行Word VBA 宏 删除软回车

    Sub 整理网页()'整理网页:删除软回车.删除空白段.使段落文字两端对齐Selection.WholeStory        Selection.Find.ClearFormatting    S ...