每次BC都好心酸。。。

BFS+queue。。状态可以设为p_val[x][y][k],加上斗志的值。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <queue>
  7. using namespace std;
  8.  
  9. char str[55];
  10. int h[55][55];
  11. double p_val[55][55][55];
  12. bool vis[55][55][55];
  13.  
  14. struct Point{
  15. int x,y,k;double p;
  16. Point(){}
  17. Point(int xx,int yy,int kk,double pp){
  18. x=xx,y=yy,p=pp;k=kk;
  19. }
  20. bool operator<(const Point &a)const{
  21. if(p>a.p)return true;
  22. else if(p==a.p){
  23. if(k<a.k) return true;
  24. }
  25. return false;
  26. }
  27. };
  28.  
  29. int dir[4][2]={
  30. {0,1},
  31. {0,-1},
  32. {1,0},
  33. {-1,0}
  34. };
  35.  
  36. int bx,by,ex,ey;
  37. priority_queue<Point>que;
  38.  
  39. void slove(int n,int m,int k,Point bt){
  40. memset(vis,false,sizeof(vis));
  41. Point tmp;
  42. //priority_queue<Point>que;
  43. que.push(bt);
  44. bool flag=false;
  45. while(!que.empty()){
  46. bt=que.top();
  47. que.pop();
  48. if(vis[bt.x][bt.y][bt.k]) continue;
  49. vis[bt.x][bt.y][bt.k]=true;
  50.  
  51. // cout<<bt.p<<endl;
  52. if(bt.p>p_val[bt.x][bt.y][bt.k]&&bt.k<=1) continue;
  53. for(int i=0;i<4;i++){
  54. tmp.x=dir[i][0]+bt.x;
  55. tmp.y=dir[i][1]+bt.y;
  56. if(tmp.x>=1&&tmp.x<=n&&tmp.y>=1&&tmp.y<=m&&h[tmp.x][tmp.y]!=-1){
  57. tmp.p=bt.p+fabs(h[bt.x][bt.y]-h[tmp.x][tmp.y])/(bt.k*1.0);
  58. tmp.k=bt.k-1;
  59. // cout<<tmp.p<<endl;
  60. if(tmp.p<p_val[tmp.x][tmp.y][tmp.k]&&abs(ex-tmp.x)+abs(ey-tmp.y)<tmp.k){
  61. p_val[tmp.x][tmp.y][tmp.k]=tmp.p;
  62. que.push(tmp);
  63. }
  64. }
  65. }
  66. }
  67. double ans=1e10;
  68. for(int i=1;i<=k;i++)
  69. ans=min(ans,p_val[ex][ey][i]);
  70. if(ans==1e10)
  71. puts("No Answer");
  72. else printf("%.2f\n",ans);
  73. }
  74.  
  75. int main(){
  76. int T,n,m,k;
  77. scanf("%d",&T);
  78. while(T--){
  79. while(!que.empty())que.pop();
  80. scanf("%d%d%d",&n,&m,&k);
  81. for(int i=1;i<=n;i++){
  82. scanf("%s",str+1);
  83. for(int j=1;j<=m;j++){
  84. for(int s=0;s<=k;s++) p_val[i][j][s]=1e10;
  85. if(str[j]=='#')
  86. h[i][j]=-1;
  87. else{
  88. h[i][j]=str[j]-'0';
  89. }
  90. }
  91. }
  92. scanf("%d%d",&bx,&by);
  93. scanf("%d%d",&ex,&ey);
  94. if(abs(ex-bx)+abs(ey-by)>k||k==0){
  95. puts("No Answer");
  96. continue;
  97. }
  98. if(bx==ex&&by==ey){
  99. puts("0.00");
  100. }
  101. else{
  102. slove(n,m,k,Point(bx,by,k,0));
  103. }
  104.  
  105. }
  106. return 0;
  107. }

HDU 5433的更多相关文章

  1. HDU 5433 Xiao Ming climbing 动态规划

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5433 Xiao Ming climbing Time Limit: 2000/1000 MS (Ja ...

  2. HDU 5433 Xiao Ming climbing dp

    Xiao Ming climbing Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/ ...

  3. HDU 5433 Xiao Ming climbing

    题意:给一张地图,给出起点和终点,每移动一步消耗体力abs(h1 - h2) / k的体力,k为当前斗志,然后消耗1斗志,要求到终点时斗志大于0,最少消耗多少体力. 解法:bfs.可以直接bfs,用d ...

  4. HDu 5433 Xiao Ming climbing (BFS)

    题意:小明因为受到大魔王的诅咒,被困到了一座荒无人烟的山上并无法脱离.这座山很奇怪: 这座山的底面是矩形的,而且矩形的每一小块都有一个特定的坐标(x,y)和一个高度H. 为了逃离这座山,小明必须找到大 ...

  5. hdu 5433 Xiao Ming climbing(bfs+三维标记)

    Problem Description   Due to the curse made by the devil,Xiao Ming is stranded on a mountain and can ...

  6. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  8. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  9. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

随机推荐

  1. [Swift通天遁地]五、高级扩展-(13)图片资源本地化设置:根据不同的语言环境显示不同语言版本图片

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. Android布局属性LayoutParams的理解

    在一次笔试中搞混LayoutParams的用法,特来总结一番: LayoutParams继承于Android.View.ViewGroup.LayoutParams.LayoutParams相当于一个 ...

  3. Android 关于android.os.Build介绍

    关于Build类的介绍 这个类为一个获取设备一些初始化信息的类,该类的主要信息都是通过一些static的字段获得: public static final String BOARD The name ...

  4. 6.11---@RequestMapping注解的6+2个属性---6.11

    produces:它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码: consumes: 指定处理请求的提交内容类型(Content-Type),例如application/ ...

  5. Laravel5.1学习笔记13 系统架构5 Contract

    Contract 简介 为什么要用 Contract? Contract 参考 如何使用 Contract 简介 Laravel 中的 Contract 是一组定义了框架核心服务的接口.例如,Illu ...

  6. 利用php生成验证码

    <?php /** * php生成验证码 * @param $width 画布宽 * @param $height 画布高 * @param $vcodelen 验证码长度 * @param $ ...

  7. linux使用mount命令挂载、umount命令取消挂载

    一.mount挂载目录方式: mount 挂载目录 磁盘目录 二.umout取消挂载目录方式: 1.umout 磁盘目录 2.umout 挂载目录 3.umout 磁盘目录 挂载目录 如下图

  8. CSS——◇demo

    核心思想:嵌套盒子中的◇超过父盒子的部分隐藏. 第一种写法: <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  9. 在CentOS6,CentOS7安装 Let'sEncrypt 免费SSL安全证书

    相对来说,个人网站建立SSL是昂贵的,而且往往过程繁琐.一个标准的2048位证书费用至少150美元/年,网站除了要支付一笔昂贵的费用.重新配置Web服务器,并需要解决大量的配置错误.这让广大中小网站望 ...

  10. Centos永久路由添加教程

    Centos 永久路由添加,一张图看懂全部 blog地址:http://www.cnblogs.com/caoguo