主题连接:



pid=1427">http://acm.hdu.edu.cn/showproblem.php?pid=1427

思路:简单的DFS。dfs(sum,next,p)表示当前已经算出的值是sum,括号里算出的值是next,当前使用的卡片下标为p,实际上是把括号外和括号内的两部分值分成sum和next来处理了。

直觉告诉我们4个数仅仅须要一层括号參与运算就够了,不会也不必用多重括号改变运算顺序,因此上面的dfs思路是正确的。

那么对于下一张卡片,有两种处理方式:

1、把next算入sum中。下一张卡片成了新的括号里的算式的值。

2、把下一张卡片的值算入next中,下一张卡片增加了括号里。

对于上述两种处理方式,每种方式又分成加减乘除四种情况讨论。而对于除法这样的情况须要特殊处理,除数不能为0,并且题目中要求运算过程中不能出现小数。因此在做除法运算前须要检查。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <algorithm> using namespace std; int cardNum[10]; //cardNum[i]=第i张牌的数字大小
bool flag=false; //flag=true表明能算出24点 int getNum(string s) //扑克牌编号s转数字
{
if(s[0]>='2'&&s[0]<='9') return s[0]-'0';
if(s=="10") return 10;
switch(s[0])
{
case 'A': return 1;
case 'J': return 11;
case 'Q': return 12;
case 'K': return 13;
}
} void dfs(int sum,int next,int p) //表示当前已经算出的值是sum,括号里算出的值是next,当前使用的卡片下标为p
{
if(p==4) //正在用第4张牌
{
if(sum+next==24||sum-next==24||sum*next==24)
flag=true;
if(next!=0&&sum%next==0&&sum/next==24)
flag=true;
return;
}
//1、不加括号
dfs(sum+next,cardNum[p+1],p+1);
dfs(sum-next,cardNum[p+1],p+1);
dfs(sum*next,cardNum[p+1],p+1);
if(next!=0&&sum%next==0)
dfs(sum/next,cardNum[p+1],p+1);
//2、加括号。则须要改变运算顺序
dfs(sum,next+cardNum[p+1],p+1);
dfs(sum,next-cardNum[p+1],p+1);
dfs(sum,next*cardNum[p+1],p+1);
if(cardNum[p+1]!=0&&next%cardNum[p+1]==0)
dfs(sum,next/cardNum[p+1],p+1);
} int main()
{
string in;
while(cin>>in)
{
flag=false;
cardNum[1]=getNum(in);
for(int i=2;i<=4;i++)
{
cin>>in;
cardNum[i]=getNum(in);
}
sort(cardNum+1,cardNum+5);
do
{
dfs(cardNum[1],cardNum[2],2);
}while(!flag&&next_permutation(cardNum+1,cardNum+5));
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}

[HDU 1427]速度计算24点(DFS暴力搜索)的更多相关文章

  1. hdu 1427 速算24点 dfs暴力搜索

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem De ...

  2. hdu 1427 速算24点【暴力枚举】

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. hdu 1427 速算24点

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1427 速算24点 Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A( ...

  4. HDU 1427 速算24点 (深搜)

    题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...

  5. ACM: Gym 100935G Board Game - DFS暴力搜索

    Board Game Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u  Gym 100 ...

  6. hdu 4740 The Donkey of Gui Zhou(暴力搜索)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...

  7. HDU 1427 速算24点【数值型DFS】

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  8. UVALive 5107 dfs暴力搜索

    题目链接:A hard Aoshu Problem DES:给三个字符串,包含的字符是A-E范围内的.长度都不超过8.每个字符可以而且只可以匹配一个数字.两个字符不能匹配相同的数字.前两个式子之间可以 ...

  9. UVALive 5844 dfs暴力搜索

    题目链接:UVAive 5844 Leet DES:大意是给出两个字符串.第一个字符串里的字符可以由1-k个字符代替.问这两个字符串是不是相等.因为1<=k<=3.而且第一个字符串长度小于 ...

随机推荐

  1. c#(winform,webform通用)利用npoi将xls文件复制为xlsx文件(excel的修改,保存,包括excel2003-office2007+的处理)

    1.程序界面 每次需要处理excel文件的时候,都是去百度找方案,真是气一头火,今天好好总结一下,下次就不用度娘了. 我是用winform来试验的,因为winform比较方便测试,实际上只要是在.ne ...

  2. uva 10131 Is Bigger Smarter?(DAG最长路)

    题目连接:10131 - Is Bigger Smarter? 题目大意:给出n只大象的属性, 包括重量w, 智商s, 现在要求找到一个连续的序列, 要求每只大象的重量比前一只的大, 智商却要小, 输 ...

  3. Java Web Services (2) - 第2章 启动日志分析

    ZHAOFLIU-Mac:dev liuzhaofu$ ./start --seed########################################################## ...

  4. 第二章排错的工具:调试器Windbg(下)

    感谢博主 http://book.51cto.com/art/200711/59874.htm 2.2  读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1  需要用汇编来排错的常见情况 汇编是 ...

  5. How to Design Programs, Second Edition

    How to Design Programs, Second Edition How to Design Programs, Second Edition

  6. Practical Common Lisp

    Practical Common Lisp Practical Common Lisp

  7. sort 使用 tab键 作为 分隔符_人生如梦_百度空间

    sort 使用 tab键 作为 分隔符_人生如梦_百度空间 sort 使用 tab键 作为 分隔符 For some reason "\t" doesn't work right, ...

  8. 沙朗javascript总结一下(一)---基础知识

    我也听说过Javascript这东西.我一直感觉很神奇,但它并没有去太懂.今天,牛腩哥哥随后的初步研究,一些浅显的认识.就先总结一下. 首先,什么是javascript? javascript是一种直 ...

  9. Oracle“记录被另一个用户锁住” 无法更新删除的解决办法

    1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b. ...

  10. a++为啥不能用作左值

    原地址:http://wy892648414.blog.163.com/blog/static/212212135201378496591/ 1)首先说左值和右值的定义: 变量和文字常量都有存储区,并 ...