[HDU 1427]速度计算24点(DFS暴力搜索)
主题连接:
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暴力搜索)的更多相关文章
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- hdu 1427 速算24点【暴力枚举】
速算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( ...
- HDU 1427 速算24点 (深搜)
题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...
- ACM: Gym 100935G Board Game - DFS暴力搜索
Board Game Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Gym 100 ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...
- HDU 1427 速算24点【数值型DFS】
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- UVALive 5107 dfs暴力搜索
题目链接:A hard Aoshu Problem DES:给三个字符串,包含的字符是A-E范围内的.长度都不超过8.每个字符可以而且只可以匹配一个数字.两个字符不能匹配相同的数字.前两个式子之间可以 ...
- UVALive 5844 dfs暴力搜索
题目链接:UVAive 5844 Leet DES:大意是给出两个字符串.第一个字符串里的字符可以由1-k个字符代替.问这两个字符串是不是相等.因为1<=k<=3.而且第一个字符串长度小于 ...
随机推荐
- C++ - Operator Precedence
The following table lists the precedence and associativity of C++ operators. Operators are listed to ...
- 插件 - 提示窗体(ArtDialog)
效果: 代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default. ...
- 【ASP.NET Web API教程】5.1 HTTP消息处理器
原文:[ASP.NET Web API教程]5.1 HTTP消息处理器 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内容. 5.1 HTTP ...
- [置顶] Vim用正则表达式进行批量修改
vim可以设置 magic 这个东西, magic就是设置哪些元字符要加反斜杠哪些不用加的. 简单来说: magic(\m):除了 $ . * ^ 之外其他元字符都要加反斜杠. nomagic(\M) ...
- Android Fragement学习笔记(三)----PreferenceFragment的使用
相信大家对Perference都比較熟悉了,也就是我们常说的偏好设置,首选项设置,能够保存一些数据,比如我们在上一次使用的时候的一些内容,希望在下一次启动后依旧生效,而不须要再进行配置那么麻烦.一般这 ...
- 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室
原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...
- 【IOS实例小计】图像移动--可扩展为动态实现图标变化
预备知识: 1.页面切换: 从一个ViewController切换到另一个ViewController有下面几种方法: (1)self.view addSubview:(加载的新页面); 相 ...
- 安卓MP3播放器开发实例(1)之音乐列表界面
学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...
- 简单的三方登录SDK示例,Android Activity之间数据的传递
先建立Library工程,即普通工程然后在Android的属性勾选Library选项. 这里建立的工程为 mySdk ,Activity名为LoginActivity. LoginActivity代码 ...
- CentOS Kernel Source Install
http://linuxmoz.com/centos-kernel-source-install/