openjudge-NOI 2.5-1789 算24
题目链接:http://noi.openjudge.cn/ch0205/1789/
题解:
并不是非常简单的搜索,需要考虑一些东西……
首先有运算符优先级的限制,还有括号,数字的顺序也可以调整,如果只是简单给式子添加运算符和括号,会比较难生成,生成后计算或许还要转换成后缀表达式之类的,很麻烦……
可以将四个数字添加进一个集合(但并不满足互异性),每次从中提取出两个数字分别进行四种计算,将结果放回集合,如此往复直到只剩一个数字,再与24比较即可(注意不一定非要相等,在适当精度内就可以)
这样也不需要考虑优先级之类的,也可以枚举出所有情况
曾经想练一下用滚动数组写一下,因为没法解决回溯问题就失败了……
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
double a[][];
bool dfs(int dep)
{
if(dep==)
{
if(abs(a[dep][]-24.0)<=0.01)return true;
return false;
}
int n=-dep+;
double t1,t2;
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)
{
if(i==j)continue;
t1=a[dep][i];
a[dep][i]=;
t2=a[dep][j];
a[dep][j]=;
int m=;
for(int l=;l<=n-;++l)
{
while(!a[dep][m])++m;
a[dep+][l]=a[dep][m];
++m;
}
a[dep+][]=t1+t2;
if(dfs(dep+))return true;
a[dep+][]=t1-t2;
if(dfs(dep+))return true;
a[dep+][]=t1*t2;
if(dfs(dep+))return true;
a[dep+][]=t1/t2;
if(dfs(dep+))return true;
a[dep][i]=t1;
a[dep][j]=t2;
}
}
return false;
}
int main()
{
while()
{
memset(a,,sizeof(a));
scanf("%lf %lf %lf %lf",&a[][],&a[][],&a[][],&a[][]);
if(!a[][])break;
if(dfs())printf("YES\n");
else printf("NO\n");
}
return ;
}
openjudge-NOI 2.5-1789 算24的更多相关文章
- 【noi 2.5_1789】算24(dfs)
最开始我想的是全排列+枚举符号和括号的方法,但是我自己倒腾了很久还是打不对,只好向他人请教.正解很机智--直接随意将几个数"捆绑"在一起,值存在其中一个数上,其他数标记不可再选,直 ...
- hdu 1427 速算24点
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1427 速算24点 Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A( ...
- 24点游戏&&速算24点(dfs)
24点游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- hdu1427之速算24点
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- python实现算24的算法
1.介绍 给定4个整数,数字范围在1-13之间,任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为24,这就是常见的算24的游戏.本文介绍用Python语言实现的两种方式.2.实现思 ...
- python 穷举法 算24点(史上最简短代码)
本来想用回溯法实现 算24点.题目都拟好了,就是<python 回溯法 子集树模板 系列 -- 7.24点>.无奈想了一天,没有头绪.只好改用暴力穷举法. 思路说明 根据四个数,三个运算符 ...
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- Hdu1427 速算24点 2017-01-18 17:26 46人阅读 评论(0) 收藏
速算24点 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submiss ...
- HDU 1427 速算24点 (深搜)
题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...
- 【Nodejs】“快算24”扑克牌游戏算法 1.02
快算24是一种挺好的锻炼孩子算数能力的扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过有限四则运算得到结果24,四张牌必须仅用一次.各地玩法还有点差别,有的只算1-10,其它抽出来:有的地方把整幅牌都 ...
随机推荐
- java的finally用法
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下. 之前在写爬虫的时候数据 ...
- 反Nim博弈
原文地址:https://blog.csdn.net/xuejye/article/details/78975900 在尼姆博奕中取完最后一颗糖的人为赢家,而取到最后一颗糖为输家的就是反尼姆博奕.这道 ...
- Mininet 系列实验(五)
实验内容 实现一个单个交换机的拓扑,添加一个交换机,和N个主机到网络中.交换机和主机之间的每个链路能够设置带宽.延迟时间.以及丢包率.创建一个包含一个交换机和四个主机的网络,使用iperf测试主机之间 ...
- kafka 多线程消费
一. 1.Kafka的消费并行度依赖Topic配置的分区数,如分区数为10,那么最多10台机器来并行消费(每台机器只能开启一个线程),或者一台机器消费(10个线程并行消费).即消费并行度和分区数一致. ...
- mysql8 net start mysql 服务名无效
解决办法: 1.win+R打开运行窗口,输入services.msc 2.在其中查看mysql的服务名,我的是MySQL80 3.以管理员身份打开cmd,输入net start MySQL80 出现下 ...
- caffe 用faster rcnn 训练自己的数据 遇到的问题
1 . 怎么处理那些pyx和.c .h文件 在lib下有一些文件为.pyx文件,遇到不能import可以cython 那个文件,然后把lib文件夹重新make一下. 遇到.c 和 .h一样的操作. 2 ...
- 安装SQL Sever数据库失败的解决办法
视频链接:https://www.bilibili.com/video/av12651739/ 我安装了SQL Sever2014.遇到了好多好多问题啊,整的我都快疯了.大致遇到的问题和解决办法如下. ...
- python2(中文编码问题):UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1
python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't deco ...
- Django 2.0.1 官方文档翻译:接下来读什么(page 14)
接下来读什么(page 14) 现在你应该已经阅读了所有的(page1-13 )介绍材料,决定继续使用Django.我们仅仅做了简要的介绍(事实上,如果你阅读了前面所有的内容,也只是全部文档的5%.) ...
- Redis学习一:Nosql入门和概述
现在Redis越来越火,为了适应技术的发展,开始学习一下Redis,在学习Redis之前先学习一下Nosql. 第一部分:入门概述 1.1 互联网时代背景下大机遇,为什么用nosql 1.1.1 单机 ...