博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ搜索专题之Kill the monster
阅读量:4983 次
发布时间:2019-06-12

本文共 860 字,大约阅读时间需要 2 分钟。

大意:英雄打怪,英雄有n个咒语,每个咒语能对怪造成一定的伤害,且只能使用一次,咒语使用的时机不同,伤害不同,具体表现为,当怪的体力小于某个特定值m时,伤害会加倍。每条咒语描述为(a,m),表示怪的体力大于m时伤害为a,其他时间为2*a。问能不能将怪打死,若能输出最少使用的咒语数,否则输出"-1"。当怪的体力小于或等于0时即认为怪死了。

分析:要求最少的次数,很容易想到使用BFS,但用DFS的关键在于状态的判重,这题可以将已经使用的咒语列表构成状态,判重时不好处理。若使用迭代加深搜索IDS则不需判重,只是时间可能要多一点。因为n最大不超过10,即最大深度为10,肯定不会超时。

View Code
1 #include 
2 #include
3 #define N 10 4 using namespace std; 5 typedef struct node 6 { 7 int hp,d; 8 char vis[N]; 9 }node;10 node cur,next;11 stack
S;12 int n,HP,a[N],m[N];13 void idfs()14 {15 bool success=false;16 int dmax=0,ans;17 while(!success && dmax<=n)18 {19 dmax++;20 cur.hp=HP;21 cur.d=0;22 for(int i=0;i
dmax) continue;30 for(int i=0;!success && i

 

转载于:https://www.cnblogs.com/algorithms/archive/2012/05/18/2507450.html

你可能感兴趣的文章
Windows 下 Python easy_install 的安装
查看>>
golang 多线程查找文件内容
查看>>
用拓扑图展现层级和组织关系(一)
查看>>
[转]13 Hours: The Secret Soldiers of Benghazi
查看>>
阿里云oss,简单上传
查看>>
软件测试2019:第四次作业
查看>>
create xmlhttprequest
查看>>
自动化学习路线
查看>>
iTOP-4418开发板Android 5.1/4.4丨Linux + Qt5.7丨Ubuntu12.04系统
查看>>
codeforces 609C Load Balancing
查看>>
Java类加载器的工作原理
查看>>
存储过程--InOut
查看>>
【十次方基础教程(后台)】3、搭建父工程
查看>>
【转载】C#将图片转换为二进制流调用
查看>>
【转载】建立自己的博客网站需要哪些步骤,并发布到公网上(企业建站流程类似)...
查看>>
ubuntu编译caffe遇到的问题及解决方案
查看>>
批量删除redis某个键值
查看>>
buildroot 搭建ftpd 服务器记录
查看>>
Vijos 1232 核电站问题(递推)
查看>>
CF 55D. Beautiful numbers(数位DP)
查看>>