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之间的自然数作为操作数,而您 ...
随机推荐
- vs vsvim viemu vax 备忘
使用gt和gT往返标签 gd:到达光标所在处函数或者变量的定义处. *:读取光标处的字符串,并且移动光标到它再次出现的地方. #:和上面的类似,但是是往反方向寻找. /text:从当前光标处开始搜索字 ...
- vim vimrc
set nu set shiftwidth= set tabstop= set softtabstop= set autoindent set cindent set smartindent file ...
- <转>四个重要属性——Action、Data、Category、Extras
Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.直接自动调用合适的程序打开不同类型的 ...
- JS 操作日期
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...
- 多个tab切换传参
var _ =peopleslive.h5; _.main=function(){ //集赞排名1 $('#tab1 .tab_nav').find('li').click (function() { ...
- H3C交换配置PBR最佳实践
简要说明 PBR算是比较常用的功能,需要我们去掌握一下 配置步骤简要 配置BFD 配置track 配置acl 配置policy-based-route 在接口上面应用policy-based-rout ...
- OSG选中效果展示
<OpenSceneGraph三维渲染引擎编程指南>书中选中高亮效果示例.osgFX特效 2.得到鼠标的位置 osgFX特效1.高亮,在开头的时候写了: 2.线框: #include< ...
- crtmpserver初探
前言 Adobe的FMS(Flash Media Server)是很好用.但对应着分级授权的是money和有限功能开放.商业的东西既然用不起,也阻碍了我们的技术进步,那就只能求助于开源社区 ...
- chrome extensions
chrome web store AppsGamesExtensionsThemes CATEGORIES All FEATURESClear Runs Offline By ...
- zzbank oneOpencloud Env linuxaix6.1 interactiveMaintain(nfs,aix genintall基于系统iso光盘,aix6.1 puppet-Agent,Cent6.4 puppetServer,agent time no syn case Er)
1,puppet--server,Client,Agent time no syn case eror puppet agent --server frontend -terr: Could not ...