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

解题思路:

dp[i][j][k]表示在(x,y)点,毅力为k时的最小体力。由于每个点可能会走多次,所以用bfs往四个方向搜索,不过考虑到最优情况,只有比dp[i][j][k]更小,才把它放进队列里。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;const int maxn = 55;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
struct Node
{int x,y,t; //t表示意志double power; //体力Node(){}Node(int _x,int _y,int _t,double _power){x = _x, y = _y, t = _t;power = _power;}
};
int n,m,k,map[maxn][maxn];
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
int sx,sy,ex,ey;
double dp[maxn][maxn][maxn];void bfs()
{queue<Node> q;dp[sx][sy][k] = 0;q.push(Node(sx,sy,k,dp[sx][sy][k]));while(!q.empty()){Node cur = q.front();q.pop();for(int i = 0; i < 4; i++){int newx = cur.x + dir[i][0];int newy = cur.y + dir[i][1];if(newx < 1 || newx > n || newy < 1 || newy > m || map[newx][newy] == -1) continue;Node next;next.x = newx,next.y = newy;next.t = cur.t - 1;double tmp = abs(map[next.x][next.y] - map[cur.x][cur.y]) / (cur.t * 1.0);if(next.t > 0 && dp[next.x][next.y][next.t] > dp[cur.x][cur.y][cur.t] + tmp){dp[next.x][next.y][next.t] = dp[cur.x][cur.y][cur.t] + tmp;next.power = dp[next.x][next.y][next.t];q.push(next);}}}
}int main()
{int t;char str[maxn];cin >> t;while(t--){cin >> n >> m >> k;for(int i = 1; i <= n; i++){cin >> str + 1;for(int j = 1; j <= m; j++){if(str[j] == '#') map[i][j] = -1;else map[i][j] = str[j] - '0';}}cin >> sx >> sy >> ex >> ey;if(k <= 0)  {  printf("No Answer\n");  continue;  }  for(int i = 0; i <= n; i++)for(int j = 0; j <= m; j++)for(int r = 0; r <= k; r++)dp[i][j][r] = inf;bfs();double MIN = dp[ex][ey][1];for(int i = 1; i <= k; i++)MIN = min(MIN,dp[ex][ey][i]);if(abs(MIN - inf) > eps)printf("%.2lf\n",MIN);else printf("No Answer\n");}return 0;
}

hdu 5433(bfs+dp)相关推荐

  1. hdu 4568 bfs + 状压dp

    //这题的数据是不是有问题... 不考虑宝藏一个也拿不到也能AC... 1 #include "bits/stdc++.h" 2 using namespace std; 3 co ...

  2. hdu 1520 树形dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...

  3. hdu 4035 可能性DP 成都网络游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 获得: 1.首先推断是不是树.事实上,所有的感觉身影,既看边数==算-1是不成立 2.有时候,我告诉孩子来 ...

  4. HDU 2836 (离散化DP+区间优化)

    Reference:http://www.cnblogs.com/wuyiqi/archive/2012/03/28/2420916.html 题目链接: http://acm.hdu.edu.cn/ ...

  5. hdu 5568(dp+大数模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5568 官方题解: #include <cstdio> #include <cstri ...

  6. hdu 5464(简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5464 解题思路: 由于p很小,而ai很大,所以先把ai%p,由于ai可能有负数,所以ai=(ai%p+ ...

  7. HDU 2859 Phalanx (dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 给你一个n*n的矩阵,问你最大的对称度是多少(左下右上为对称线) dp[i][j]表示i行j列元 ...

  8. HDU - 3571 HDU CakeMan(bfs+最短路必经点)

    题目链接:点击查看 题目大意:给出一个n*m的地图: 'D'表示小贩 'S'表示小贩的家 'C'表示城管 'X'表示墙 '.'表示路 '数字'表示小贩需要多停留几秒钟 现在城管发现了小贩,小贩会选择任 ...

  9. HDU3247 Resource Archiver(AC自动机+BFS+DP)

    题目,求最短的包含所有n个DNA片段且不包含任何一个病毒片段的序列. 容易用所有DNA片段和病毒片段建一个AC自动机,构造fail时处理一下各个结点后缀是DNA或者病毒的情况,然后dp[S][u]表示 ...

最新文章

  1. stat用法:获取文件对应权限的数字
  2. C++ 编译,运行过程 详解。
  3. 【AI初识境】近20年深度学习在图像领域的重要进展节点
  4. TO B 产品经理:如何推动产品商业化?
  5. python中的字符串操作及注意事项
  6. 2012三足鼎立:BEC、托业与博思的比较
  7. ssas对数据仓库_SSAS中的多对多关系简介
  8. WCF Endpoint分类
  9. 哪几种情况可以销毁session(一般有3种)
  10. 出售永磁同步电机(pmsm)模型预测控制(MPC)matlab/simulink仿真模型,转速控制,电流控制,转矩控制,直接预测控制(有限集模型预测控制)(这单矢量和双矢量,三矢量),无差拍,foc矢
  11. 用js如何实现获取验证码
  12. Internet Explorer无法打开internet站点,已终止操作的解决方法合集
  13. npm的package.json和package-lock.json更新策略
  14. Unity 骨骼动画
  15. 人工智能导论(5)——搜索策略(Search Strategy)
  16. linux su命令免密,使用PAM模块实现普通用户之间su免密切换
  17. ESP32双核CPU,利用核0实现蓝牙打印机打印,核1完成常规控制
  18. QIIME2进阶六_QIIME2训练分类器及物种注释
  19. 数字电路_1. 逻辑门表达式 真值表
  20. Android之SeekBar(0在中间)

热门文章

  1. linux 内核 scsi底层驱动程序,Linux系统下基于SCST的SCSI_Target驱动设计.doc
  2. 「神策 2020 数据驱动用户大会」10 月 13 日即将开幕,5 大亮点提前解锁!
  3. Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
  4. 三年0故障是如何做到的?
  5. 【非凡程序员】 OC第一节课 (指针浅析)
  6. PHP的学习--解析URL
  7. ICallbackEventHandler 前后台无刷新交互
  8. 用C#实现RSS的生成和解析,支持RSS2.0和Atom格式
  9. zabbix 2.2自动安装脚本
  10. three ways for reducing the level of anxiety