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, ...
随机推荐
- C# 之 日常积累(二)
主要涉及(1)数字前补0:(2)去掉decimal类型后边无效的0相关问题. 1.数字前补0 ; ) { returnnumber.ToString(); } else { returnnumber. ...
- 查看Oracle SQL执行计划的常用方式
在查看SQL执行计划的时候有很多方式 我常用的方式有三种 SQL> explain plan for 2 select * from scott.emp where ename='KING'; ...
- debian 开启SSH
1.修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 2.将#PasswordAuthentication no的注释去掉,并且将NO修改为YES //我的ka ...
- epoll讲解--转自”知乎“
http://my.oschina.net/dclink/blog/287198 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套 ...
- Time complexity analysis of algorithms
时间复杂性的计算一般而言,较小的问题所需要的运行时间通常要比较大的问题所需要的时间少.设一个程序P所占用的时间为T,则 T(P)=编译时间+运行时间. 编译时间与实例特征是无关的,且可假设一个编译过的 ...
- Linux忘记mysql的root密码的解决办法
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录 ...
- hive与hbase集成
http://blog.csdn.net/vah101/article/details/22597341 这篇文章最初是基于介绍HIVE-705.这个功能允许Hive QL命令访问HBase表,进行读 ...
- 快速了解Scala技术栈
http://www.infoq.com/cn/articles/scala-technology/ 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为 ...
- 通过Workbook类 生成Excel导出数据
需求: 实现错误信息生成Excel保存到本地让用户查看. 刚开始使用了微软自带的Microsoft.Office.Interop.Excel类库. Microsoft.Office.Interop.E ...
- Logcat中报内存泄漏MemoryLeak的一次分析
有时候运行APP的时候Logcat中会报错,提示资源没有释放,Memory leak, 于是打开Android Studio在Android Monitor工具栏点开,有Logcat和Monitors ...