题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2653

题目大意:迷宫中有普通点和陷阱。其中普通点可以走可以飞,但是陷阱只能飞。走耗时1,飞耗时2。但是飞耗能1。给定一定能量P,问是否能在T秒内走出。

解题思路

一开始SB似地认为每个点最多访问两次。其实每个点最多可以访问P次。

vis[X][Y][P]表示在(x,y)点能量为P的状态。

容易出错的地方在于这个组合: @. ,虽说是飞吧,但是还是会在陷阱上卡1s,尽管下一个点是. ,但是这种情况是必须飞的。

@@肯定是飞的,..这个就是可飞,可不飞。

BFS树明显是不均衡的,使用优先队列找到的第一个答案就可以return。

#include "cstdio"
#include "string"
#include "cstring"
#include "iostream"
#include "queue"
using namespace std;
char map[85][85];
int n,m,T,p,no,sx,sy,ex,ey,vis[85][85][85],dir[4][2]={-1,0,1,0,0,-1,0,1};
struct status
{int x,y,dep,mana;status(int x,int y,int dep,int mana):x(x),y(y),dep(dep),mana(mana) {}bool operator < (const status &a) const {return dep > a.dep;}
};
int bfs(int x,int y,int mana)
{priority_queue<status> Q;Q.push(status(x,y,0,mana));vis[x][y][mana]=1;while(!Q.empty()){status t=Q.top();Q.pop();if(t.dep>=T) return -1;for(int s=0;s<4;s++){int X=t.x+dir[s][0],Y=t.y+dir[s][1];if(X<1||X>n||Y<1||Y>m||map[X][Y]=='#') continue;if(map[X][Y]=='@'){if(t.mana<1||vis[X][Y][t.mana-1]) continue;vis[X][Y][t.mana-1]=true;Q.push(status(X,Y,t.dep+1,t.mana-1));}else{if(map[t.x][t.y]=='@'&&t.mana<1) continue;if(X==ex&&Y==ey){if(t.mana>=1) return t.dep+1;else return t.dep+2;}if(t.mana>=1||map[t.x][t.y]=='@'){if(!vis[X][Y][t.mana-1]) {vis[X][Y][t.mana-1]=true;Q.push(status(X,Y,t.dep+1,t.mana-1));}}if(map[t.x][t.y]!='@'&&!vis[X][Y][t.mana]) {vis[X][Y][t.mana]=true;Q.push(status(X,Y,t.dep+2,t.mana));}}}}return -1;
}
int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);string tt;while(cin>>n>>m>>T>>p){memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){cin>>tt;for(int j=0;j<tt.size();j++){map[i][j+1]=tt[j];if(tt[j]=='Y') {sx=i;sy=j+1;}if(tt[j]=='L') {ex=i;ey=j+1;}}}int ans=bfs(sx,sy,p);cout<<"Case "<<++no<<":"<<endl;if(ans>T||ans==-1) cout<<"Poor Yifenfei, he has to wait another ten thousand years."<<endl;else cout<<"Yes, Yifenfei will kill Lemon at "<<ans<<" sec."<<endl;}
}

11892623 2014-10-17 12:22:29 Accepted 2653 218MS 2956K 2378 B C++ Physcal

HDU 2653 (记忆化BFS搜索+优先队列)相关推荐

  1. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. 1 #include<iost ...

  2. hdu 1142 记忆化搜索

    题目是这样的,貌似一开始我这个英语搓的人还理解错了...orz http://acm.hdu.edu.cn/showproblem.php?pid=1142 就是最短路,只不过用dijkstra是从终 ...

  3. hdu 1514 记忆化搜索

    题意是给4堆(堆的高度小于等于40)有颜色(颜色的种类小于等于20)的物品,你有一个篮子最多能装5件物品,每次从这4堆物品里面 任取一件物品放进篮子里,但是取每堆物品时,必须先取上面的物品,才能取下面 ...

  4. HDU 4166 BNU 32715 Robot Navigation (记忆化bfs)

    题意:给一个二维地图,每个点为障碍或者空地,有一个机器人有三种操作:1.向前走:2.左转90度:3.右转90度.现给定起点和终点,问到达终点最短路的条数. 思路:一般的题目只是求最短路的长度,但本题还 ...

  5. hdu 1078 记忆化搜索

    题意:给出n*n的格子,每个各自里面有些食物,问一只老鼠每次走最多k步所能吃到的最多的食物 虽然是做过的老题了,但是1A的感觉好爽,对搜索认识更深了 1 #include<cstdio> ...

  6. 力扣 1553. 吃掉 N 个橘子的最少天数 记忆化DFS|记忆化BFS|剪枝

    吃掉 N 个橘子的最少天数 厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子. 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子. 如果剩余橘子数 n ...

  7. UVA 10798 - Be wary of Roses(记忆化BFS)

    UVA 10798 - Be wary of Roses 题目链接 题意:给定一个地图,人一开始在中心,问选择一种走法走出去,使得面朝任何一个方向走,踩到的花的最大值最小 思路:用优先队列进行BFS, ...

  8. 【BZOJ - 2574】[Poi1999] Store-Keeper(点双连通分量,求割点,记忆化bfs)

    题干: 有一个仓库被分成n*m 个矩形区域,如果两个区域有一条公共边,则被认为这两个区域相邻.包裹都放在一个区域中,剩余的区域或者空闲或者被集装箱占有,这是因为集装箱太重,仓库管理员不能将集装箱搬走. ...

  9. FZU 2124 - 吃豆人 记忆化BFS..

    题意: 吃豆人是一款非常经典的游戏,游戏中玩家控制吃豆人在地图上吃光所有豆子,并且避免被怪物抓住. 这道题没有怪物,将游戏的画面分成n*m的格子,每格地形可能为空地或者障碍物,吃豆人可以在空地上移动, ...

最新文章

  1. 大数据在统计中的应用初探
  2. 从Git存储库中删除文件而不从本地文件系统中删除它
  3. 单调递增最长子序列(南阳理工ACM)
  4. Cookie与Session的区别
  5. 性能翻倍 IBM借DS3500拓中低端存储市场
  6. IBASE and ES change pointer
  7. 郑洁又淘汰了一个美女瓦伊迪索娃
  8. python闭环最短路径_深度学习经典算法 | 蚁群算法解析
  9. 一个基于 SpringBoot 开源的小说和漫画在线阅读网站,简洁大方 !强烈推荐 !
  10. NMEA0183标准语句
  11. [JNI]开发之旅(4)项目架构介绍
  12. Linux安装MySQL安装包下载
  13. 面试: 华为综合测试
  14. dnssec_OPNSense上的DNSSEC,DoT和DNSBL
  15. Python分析上证指数历史数据,发现估值还不够低……
  16. java-net-php-python-java宿舍管理系统计算机毕业设计程序
  17. 贷记、借记、来帐、往账的区别
  18. python做事件研究法_35行代码搞定事件研究法(上)
  19. 程序员的系统桌面应该是这样的
  20. 【深浅拷贝的实现方式】

热门文章

  1. 7-12 藏头诗 (15 分)
  2. 无重复字符串的最长子串
  3. 输入一个以回车结束的字符串,判断该字符串是否对称(正序与逆序相同,如aBc2cBa为对称字符串)
  4. php学习总结,PHP学习的技巧和学习的要素总结
  5. vue的activated和deactivated生命周期
  6. cf1114 D. Flood Fill
  7. STL之template类模板
  8. OC 观察者模式(通知中心,KVO)
  9. Mac osx 下配置ANT
  10. background-position 用法介绍