HDOJ 1427(dfs) 速算24点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1427
思路分析:
题目要求判断是否存在一种运算组合使得4个数的计算结果为24,因为搜索的层次为3层,不需要选择出最短的路径,采用dfs更有效;
拓展状态时,从当前状态拥有的数中选取两个进行某种运算(因为两个数之间存在大小关系,所以对于除法与减法来说,运算顺序一定,
大的数为被减数或被除数;加法与乘法具有交换律,相对顺序没有影响),如果可以进行运算且运算结果满足题目要求,则该状态可以
拓展,如此拓展状态,直到检测到存在一种可能的运算顺序使运算结果为24。
代码如下:
#include <iostream>
#include <cmath>
using namespace std; struct Cards
{
int num[];
int len;
}; int Max(int lhs, int rhs) { return lhs > rhs ? lhs : rhs; }
int Min(int lhs, int rhs) { return lhs > rhs ? rhs : lhs; }
double Calculate(int i, int t_lhs, int t_rhs, bool &ok)
{
int lhs, rhs; lhs = Max(t_lhs, t_rhs);
rhs = Min(t_lhs, t_rhs);
if (i == ) return lhs + rhs;
if (i == ) return lhs - rhs;
if (i == ) return lhs * rhs;
if (i == )
{
if (rhs != && lhs >= rhs && lhs % rhs == )
return lhs / rhs;
else
{
ok = false;
return ;
}
}
} void dfs(Cards start, bool &find_ans)
{
if (start.len == )
{
if (start.num[] == )
find_ans = true;
return;
}
else
{
int len = start.len; for (int i = ; i < len; ++i)
{
for (int j = i + ; j < len; ++j)
{
int count = ;
int lhs = start.num[i];
int rhs = start.num[j];
Cards next; for (int k = ; k < len; ++k)
{
if (k != i && k != j)
next.num[count++] = start.num[k];
}
next.len = count + ; for (int k = ; k < ; ++k)
{
bool ok = true;
double result = Calculate(k, lhs, rhs, ok); if (find_ans)
return;
if (!ok || result != (int)result)
continue;
next.num[count] = result;
dfs(next, find_ans);
}
}
}
}
} int StrToInt(char *s)
{
int result = ;
if (s[] == 'A') result = ;
else if (s[] == 'J') result = ;
else if (s[] == 'Q') result = ;
else if (s[] == 'K') result = ;
else if (s[] == '' && s[] == '') result = ;
else result = s[] - ''; return result;
} int main()
{
Cards start;
bool find_ans;
char temp[]; while (scanf("%s", &temp) != EOF)
{
find_ans = false;
start.len = ;
start.num[] = StrToInt(temp);
for (int i = ; i < ; ++i)
{
scanf("%s", &temp);
start.num[i] = StrToInt(temp);
} dfs(start, find_ans);
if (find_ans)
cout << "Yes\n";
else
cout << "No\n";
}
return ;
}
HDOJ 1427(dfs) 速算24点的更多相关文章
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- 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( ...
- 24点游戏&&速算24点(dfs)
24点游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- HDU 1427 速算24点 (深搜)
题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...
- hdu 1427 速算24点【暴力枚举】
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Hdu1427 速算24点 2017-01-18 17:26 46人阅读 评论(0) 收藏
速算24点 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submiss ...
- hdu1427之速算24点
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 【DFS】算24点
[tyvj2802/RQNOJ74]算24点 描述 几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”.您作为游戏者将得到4个1~9之间的自然数作为操作数,而您 ...
随机推荐
- Asp.Net 请求处理机制
前言 我们都知道Web请求响应是基于Http协议,那么我们可以这样来理解,一次Web请求和响应的过程,实际上就是一次发送Http请求和接收Http响应的过程. 客户端向服务器发送一次Http请求,服务 ...
- jquery取对象数组元素的错误方式
代码如下: <div id="div1"> <span>a</span> <span>b</span> <span ...
- 一句代码美化你的下框之jquery.selectMM修复版(jquery.selectMM v0.9 beta 20141217)
一句代码美化你的下框之jquery.selectMM修复版(jquery.selectMM v0.9 beta 20141217) 浏览效果: http://www.beyond630.com/jqu ...
- PHP中include和require的区别
include和require的区别,其实两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出. 根据测试,win32 ...
- 不包含任何UserControl
奇怪了,以前做控件的时候都没有这个问题,哎,又堕落了1年,什么都忘了 创建自定义控件 可以继承现有控件,也可以继承userContrl类,但是现在有个问题 很多网上的资料说,啊,直接创建一个自定义控件 ...
- [问题解决] Tomcat Child not unique
错误: child not unique 发生场景: tomcat服务器 解决方案: 将tomcat中的server.xml文件配置: <Host name="localhos ...
- 使用 PyQt 转换网页到 PDF(使用QtWebKit加载完毕后,打印整个窗口就行了,真简单!)
import sys try: from PyQt4 import QtWebKit from PyQt4.QtCore import QUrl from PyQt4.QtGui import QAp ...
- STL 全特化/偏特化
template<class T> class Compare { public: static bool isEqual(const T& lh,const T& rh) ...
- Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh
Hyperpolyglot Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh grammar | quoting and escaping | charactersvar ...
- Android Studio配置(build优化和as优化)
首先是用户目录下的C:\Users\用户名\.gradle\文件下创建gradle.properties文件 输入 org.gradle.daemon=trueorg.gradle.configure ...