hdu 1427 dfs
题意:随机给你四张牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算 顺序,使得最终运算结果为24(每个数必须且仅能用一次)。针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不能出现小数。
思路:开始时对于里面的括号加在哪里,感觉没有方向;之后看了博乐的文字思路讲解 之后,自己敲了代码;
//Accepted 1427 234MS 2072K 1747 B G++
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int getvalue(const string str)
{
if(str[] >= ''&&str[] <= '') return str[] - '';
else if(str[] == '') return ;
else if(str[] == 'A') return ;
else if(str[] == 'J') return ;
else if(str[] == 'Q') return ;
else if(str[] == 'K') return ;
}
int cal(int a,int b,int op)
{
if(op == ) return a+b;
else if(op == ) return a - b;
else if(op == )return a*b;
else return (b==||a%b)?inf : a/b;
} bool dfs(int* v)
{
int t[]={};
for(int i = ;i <= ;i++){// 先处理(v[0],v[1])与(v[1],v[2]),之后处理中间的符号,如(1+2)*(3-4)
t[] = cal(v[],v[],i);
for(int j = ;j <= &&t[] != inf;j++){
t[] = cal(v[],v[],j);
for(int k = ;k <= &&t[] != inf;k++){
t[] = cal(t[],t[],k);
if(abs(t[]) == ) return true; // 需要取绝对值;
}
}
}
for(int i = ;i <= ;i++){ // 从前往后计算
t[] = cal(v[],v[],i);
for(int j = ;j <= &&t[] != inf;j++){
t[] = cal(t[],v[],j);
for(int k = ;k <= &&t[] != inf;k++){
t[] = cal(t[],v[],k);
if(abs(t[]) == ) return true;
}
}
}
return false;
}
int main()
{
string s;stringstream str;
while(getline(cin,s)){
int v[];
str.clear();
str<<s;
string stmp;
for(int i = ;str>>stmp;){
v[i++] = getvalue(stmp);
}
sort(v,v+);
int flag = ;
do{
if(dfs(v)){
flag = ;
break;
}
}while(next_permutation(v,v+));
puts(flag?"Yes":"No");
}
}
hdu 1427 dfs的更多相关文章
- HDU 5143 DFS
分别给出1,2,3,4 a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- [HDU 1427]速度计算24点(DFS暴力搜索)
主题连接: pid=1427">http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表 ...
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- HDU - 1427 / UESTC - 1252 经典dfs
很好奇为什么hzwer那种稍改一下还是无法过样例,代码我没看出问题 换了一种用桶组合挑取两个数不断回溯的做法 这是HDU1427的代码,后者改一改就行了 #include<bits/stdc++ ...
- HDU 1427 速算24点【数值型DFS】
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1427 速算24点
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1427 速算24点 Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A( ...
- HDOJ 1427(dfs) 速算24点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路分析: 题目要求判断是否存在一种运算组合使得4个数的计算结果为24,因为搜索的层次为3层,不 ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
随机推荐
- Android屏幕分辨率详解(VGA、HVGA、QVGA、WVGA、WQVGA)
这些术语都是指屏幕的分辨率. VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素: HVGA:Half-size VGA:即:VGA的一半,分辨率为480× ...
- STC89C52单片机内部EEPROM驱动
STC89C52单片机自身带有4K的存储空间,分为8个扇区,每个扇区512字节,第一扇区起始地址为:0x2000, 结束地址为:21FF, 第八扇区起始地址为0x2E00,结束地址是2FFF #inc ...
- xss脚本攻击
xss脚本攻击不仅仅只是alert(1)就算完了,xss脚本攻击真正的用处是盗取普通用户的cookie,或者盗取管理员的cookie. xss分类(类型): 1. 反射型xss2. 存储型xss3. ...
- iOS 图片加载框架- SDWebImage 解读
在iOS的图片加载框架中,SDWebImage可谓是占据大半壁江山.它支持从网络中下载且缓存图片,并设置图片到对应的UIImageView控件或者UIButton控件.在项目中使用SDWebImage ...
- 2.CentOS更换阿里源
第一步:备份本地yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 第二步:下载阿里y ...
- gradle与maven项目相互转化
gradle这几年发展迅猛,github越来越多的项目都开始采用gradle来构建了,但是并不是所有人都对gradle很熟悉,下面的方法可以把gradle转成maven项目,前提gradle项目目录结 ...
- VIM 选择多行,复制粘贴
进入VIM,比如编辑一个文件, 1.进行选择,是V模式,按V键,进入该模式,然后选择要复制的行 2. 选择好之后,再按y键,即使复制到了 3.然后光标进入要复制的行之后,按一下P键,就粘贴了,oh y ...
- 【转】Android自动化测试之MonkeyRunner录制和回放脚本(四)
测试脚本录制: 方案一: 我们先看看以下monkeyrecoder.py脚本: #Usage: monkeyrunner recorder.py #recorder.py http://mirror ...
- 简单的ROT13码编码与解码
ROT13码意思是将字母左移13位.如'A' ↔ 'N', 'B' ↔ 'O','V' ↔ 'I'. 下面实现ROT13码的解码. function rot13(str) { var arr = [] ...
- 论js中的prototype
今天在阅读代码时,碰到了prototype //判断是否是数组function isArray(obj) { return Object.prototype.toString.call(obj) == ...