我对状态空间的理解: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. Kerberos Ticket管理

    Kerberos Ticket管理 本章介绍如何管理您的Kerberos Ticket,这里的Ticket是指Ticket-Granting-Ticket(TGT),是您访问集群中服务的凭证.我们假设 ...

  2. android菜鸟学习笔记18----Android数据存储(二)SharedPreferences

    数据存储的方式,有比直接文件读写更加简便的方式,那就是操作SharedPreferences. SharedPreferences一般用于存储用户的偏好设定,暂时不支持多进程操作. SharedPre ...

  3. hdu 4068 I-number【大数】

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=4608 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. git reset和git revert

    1 git reset commit-id 直接回到某次提交,该次commit-id之后的提交都会被删除. --hard,将index和本地都恢复到指定的commit版本. 2 git revert ...

  5. xlrd python excel

     xlrd python excel

  6. CSS 布局实例系列(四)如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?

    Hello,小朋友们,还记得我是谁吗?对了,我就是~超威~好啦,言归正传,今天的布局实例是: 实现一个浮动布局,红色容器中每一行的蓝色容器数量随着浏览器宽度的变化而变化,就如下图: 肯定有人心里犯嘀咕 ...

  7. ThinkPHP5.0 用docker部署

    Dockerfile 文件如下: FROM hub.c.163.com/shenggen/thinkphp-docker:v0.0.1 ADD . /app RUN ["chmod" ...

  8. (转)jquery $.proxy的使用

    在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用 2 $('#myElement').click(function() { ...

  9. Iptalbes练习题(二)

    接着上节,上节课,基本功能设置后,现在我们telnet本机一下,发现问题: [root@test1 ~]# telnet Trying 127.0.0.1... telnet: connect to ...

  10. C# 半角?全角

    /// <summary> /// 将资料表中已修改的资料行数据去左右空格.全角转半角 /// </summary> public sealed class FieldFitS ...