萌新首发暴力题解,大佬忽喷

不得不说,个人认为许多大佬们把程序想复杂了,所以码量很长,但是实际上这题并不要这么复杂。。。

可以考虑用一个\(dfs\)维护一个状态\(f(n)[a_1,a_2……a_n]\)

接下来我们暴力枚举两两配对的方案,对于每个\(a[i]\),\(a[j]\)只要算出两数的较大值和较小值再进行模拟加减乘除运算即可。

至于评论区里提到的反减和反除其实是不必考虑的,试想我们每次都是用较大值减较小值,较大值除较小值,也就不可能出现小减大或者小除大的情况。

而对于\(a[i]\),\(a[j]\)两两配对,可以将他们运算的结果存入\(a[i]\),而\(a[j]\)可以存\(a[n]\)的量。说白了就是简单的滚动数组啦~

那么这个状态就被压缩成了\(f(n-1)[a_1,a_2……a_{n-1}]\),继续\(dfs\)。

对于边界处理,即当\(n=1\)时状态变为了\(f(1)[a_1]\),\(a_1\)就是最终结果。若\(a_1=24\)说明成立,过程在每次运算中维护就\(ok\)了。

#include<bits/stdc++.h>
using namespace std;
int num[10],f[20];
char ch[10];
bool Game(int n){
if(n==1){//边界
if(num[1]==24)return true;//判结果
else return false;
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){//两两匹配,即可模拟所有可能
int ti=num[i],tj=num[j];//保留原结果
int a=max(ti,tj);
int b=min(ti,tj);//取较大较小值
int t=4-n;
num[j]=num[n];//压缩数组
//初始化
f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a+b;
ch[t+1]='+';//记录运算过程
num[i]=a+b;//做加法
if(Game(n-1))return true;//DFS f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a-b;
ch[t+1]='-';//记录运算过程
num[i]=a-b;//做减法
if(Game(n-1))return true;//DFS f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a*b;
ch[t+1]='*';//记录运算过程
num[i]=a*b;//做乘法
if(Game(n-1))return true;//DFS if(b!=0&&a%b==0){//判断是否除的尽
if(a/b>=1){
f[t*3+1]=a;
f[t*3+2]=b;
f[t*3+3]=a/b;
ch[t+1]='/';//记录运算过程
num[i]=a/b;//做除法
if(Game(n-1))return true;//DFS
}
} num[i]=ti;
num[j]=tj;//答案错误还原之前结果
}
}
return false;
}
int main(){
for(int i=1;i<=4;i++){
cin>>num[i];
}
if(Game(4)){
cout<<f[1]<<ch[1]<<f[2]<<'='<<f[3]<<endl;
cout<<f[4]<<ch[2]<<f[5]<<'='<<f[6]<<endl;
cout<<f[7]<<ch[3]<<f[8]<<'='<<f[9]<<endl;//暴力输出
}else{
cout<<"No answer!"<<endl;
}
return 0;
}

\(\operatorname{Update} \operatorname{On} \operatorname{2018.12.01}\)

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

  1. 洛谷 P1236 算24点

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

  2. 洛谷P1236 算24点

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

  3. 题解-洛谷P4859 已经没有什么好害怕的了

    洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...

  4. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  5. 题解 洛谷P2959 【[USACO09OCT]悠闲漫步The Leisurely Stroll】

    原题:洛谷P2959 不得不说这道题的图有点吓人,但实际上很多都没有用 通过题上说的“三岔路口”(对于每一个节点有三条连接,其中一条连接父节点,另外两条连接子节点)和数据,可以那些乱七八糟的路和牧场看 ...

  6. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  7. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  8. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  9. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

随机推荐

  1. Win10 专业版 Hyper-V 主机计算服务无法启动

    Windows 10升级1809版本后,发现Hyper-V不能用了,管理器里是一片空白,看服务Hyper-V 主机计算服务没有启动,手动启动的话失败,报错,代码1053. 自己尝试修复,也百度了很久, ...

  2. “无法从节点xx检索exectask的版本” 原因分析

    客户有一套部署在Window 2008 R2 sp环境下的12.1.0.2 RAC环境,该RAC基于策略管理.因为业务需要,现在需要更换部分设备——踢出两台2路的服务器(节点名称分别为racnode2 ...

  3. ThreadLocal源代码1

    public class ThreadLocalTrxt { static ThreadLocal<Object> x1 = new ThreadLocal<Object>() ...

  4. ProxyGenerator proxy = new ProxyGenerator(); 代理+拦截器模式

    所谓代理,就是不直接访问目标对象,而是由中间对象生成一个目标代理类,由中间代理对象来代理目标对象的方法.Java里面有JDK和CGLIB代理.C#里面则使用Castle代理.nuget引用如下: &l ...

  5. c#中特性Attribute

    接上篇: 特性介绍: 特性是一个类,需要间接或者直接继承Attribute父类,在标记特性时以中括号包裹,可以标记在元素之前.AttributeTargets.Class设置标记的元素,需要明确指定标 ...

  6. 浏览器解析js和type判断数据类型

    ### 浏览器解析: - 1.当浏览器(内核.引擎)解析和渲染js的时候,会给js提供一个运行的环境,这个环境叫做“全局作用域(后端global / 客服端window scope)” - 2.代码自 ...

  7. spring cloud各个版本之间的区别

    最近公司在使用spring cloud进行开发,对于spring cloud版本号一直有疑惑. 那个版本在前?那个版本在后? 那个版本是最新的? 一.常见版本号说明 举个瓜:2.0.3 RELEASE ...

  8. Mysql向新建表中插入数据, Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'UserName' at row 1

    在本地通过MYSQL创建测试表 CREATE Table User ( UserId int not NULL PRIMARY KEY auto_increment, //主键自增 UserName ...

  9. 在Java中如何设置一个定时任务,在每天的一个时间点自动执行一个特定的程序

    Quartz定时机制 首先导入jar包到程序内 quartz-all-1.6.0.jar 然后创建一个XML TimeConfig.xml 名字可以自己定义 <?xml version=&quo ...

  10. JAVA基础之设置随机成语验证码

    package com.oracle; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ja ...