HDU 5433
每次BC都好心酸。。。
BFS+queue。。状态可以设为p_val[x][y][k],加上斗志的值。
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- #include <queue>
- using namespace std;
- char str[55];
- int h[55][55];
- double p_val[55][55][55];
- bool vis[55][55][55];
- struct Point{
- int x,y,k;double p;
- Point(){}
- Point(int xx,int yy,int kk,double pp){
- x=xx,y=yy,p=pp;k=kk;
- }
- bool operator<(const Point &a)const{
- if(p>a.p)return true;
- else if(p==a.p){
- if(k<a.k) return true;
- }
- return false;
- }
- };
- int dir[4][2]={
- {0,1},
- {0,-1},
- {1,0},
- {-1,0}
- };
- int bx,by,ex,ey;
- priority_queue<Point>que;
- void slove(int n,int m,int k,Point bt){
- memset(vis,false,sizeof(vis));
- Point tmp;
- //priority_queue<Point>que;
- que.push(bt);
- bool flag=false;
- while(!que.empty()){
- bt=que.top();
- que.pop();
- if(vis[bt.x][bt.y][bt.k]) continue;
- vis[bt.x][bt.y][bt.k]=true;
- // cout<<bt.p<<endl;
- if(bt.p>p_val[bt.x][bt.y][bt.k]&&bt.k<=1) continue;
- for(int i=0;i<4;i++){
- tmp.x=dir[i][0]+bt.x;
- tmp.y=dir[i][1]+bt.y;
- if(tmp.x>=1&&tmp.x<=n&&tmp.y>=1&&tmp.y<=m&&h[tmp.x][tmp.y]!=-1){
- tmp.p=bt.p+fabs(h[bt.x][bt.y]-h[tmp.x][tmp.y])/(bt.k*1.0);
- tmp.k=bt.k-1;
- // cout<<tmp.p<<endl;
- if(tmp.p<p_val[tmp.x][tmp.y][tmp.k]&&abs(ex-tmp.x)+abs(ey-tmp.y)<tmp.k){
- p_val[tmp.x][tmp.y][tmp.k]=tmp.p;
- que.push(tmp);
- }
- }
- }
- }
- double ans=1e10;
- for(int i=1;i<=k;i++)
- ans=min(ans,p_val[ex][ey][i]);
- if(ans==1e10)
- puts("No Answer");
- else printf("%.2f\n",ans);
- }
- int main(){
- int T,n,m,k;
- scanf("%d",&T);
- while(T--){
- while(!que.empty())que.pop();
- scanf("%d%d%d",&n,&m,&k);
- for(int i=1;i<=n;i++){
- scanf("%s",str+1);
- for(int j=1;j<=m;j++){
- for(int s=0;s<=k;s++) p_val[i][j][s]=1e10;
- if(str[j]=='#')
- h[i][j]=-1;
- else{
- h[i][j]=str[j]-'0';
- }
- }
- }
- scanf("%d%d",&bx,&by);
- scanf("%d%d",&ex,&ey);
- if(abs(ex-bx)+abs(ey-by)>k||k==0){
- puts("No Answer");
- continue;
- }
- if(bx==ex&&by==ey){
- puts("0.00");
- }
- else{
- slove(n,m,k,Point(bx,by,k,0));
- }
- }
- return 0;
- }
HDU 5433的更多相关文章
- HDU 5433 Xiao Ming climbing 动态规划
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5433 Xiao Ming climbing Time Limit: 2000/1000 MS (Ja ...
- HDU 5433 Xiao Ming climbing dp
Xiao Ming climbing Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/ ...
- HDU 5433 Xiao Ming climbing
题意:给一张地图,给出起点和终点,每移动一步消耗体力abs(h1 - h2) / k的体力,k为当前斗志,然后消耗1斗志,要求到终点时斗志大于0,最少消耗多少体力. 解法:bfs.可以直接bfs,用d ...
- HDu 5433 Xiao Ming climbing (BFS)
题意:小明因为受到大魔王的诅咒,被困到了一座荒无人烟的山上并无法脱离.这座山很奇怪: 这座山的底面是矩形的,而且矩形的每一小块都有一个特定的坐标(x,y)和一个高度H. 为了逃离这座山,小明必须找到大 ...
- 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 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- [Swift通天遁地]五、高级扩展-(13)图片资源本地化设置:根据不同的语言环境显示不同语言版本图片
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Android布局属性LayoutParams的理解
在一次笔试中搞混LayoutParams的用法,特来总结一番: LayoutParams继承于Android.View.ViewGroup.LayoutParams.LayoutParams相当于一个 ...
- Android 关于android.os.Build介绍
关于Build类的介绍 这个类为一个获取设备一些初始化信息的类,该类的主要信息都是通过一些static的字段获得: public static final String BOARD The name ...
- 6.11---@RequestMapping注解的6+2个属性---6.11
produces:它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码: consumes: 指定处理请求的提交内容类型(Content-Type),例如application/ ...
- Laravel5.1学习笔记13 系统架构5 Contract
Contract 简介 为什么要用 Contract? Contract 参考 如何使用 Contract 简介 Laravel 中的 Contract 是一组定义了框架核心服务的接口.例如,Illu ...
- 利用php生成验证码
<?php /** * php生成验证码 * @param $width 画布宽 * @param $height 画布高 * @param $vcodelen 验证码长度 * @param $ ...
- linux使用mount命令挂载、umount命令取消挂载
一.mount挂载目录方式: mount 挂载目录 磁盘目录 二.umout取消挂载目录方式: 1.umout 磁盘目录 2.umout 挂载目录 3.umout 磁盘目录 挂载目录 如下图
- CSS——◇demo
核心思想:嵌套盒子中的◇超过父盒子的部分隐藏. 第一种写法: <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- 在CentOS6,CentOS7安装 Let'sEncrypt 免费SSL安全证书
相对来说,个人网站建立SSL是昂贵的,而且往往过程繁琐.一个标准的2048位证书费用至少150美元/年,网站除了要支付一笔昂贵的费用.重新配置Web服务器,并需要解决大量的配置错误.这让广大中小网站望 ...
- Centos永久路由添加教程
Centos 永久路由添加,一张图看懂全部 blog地址:http://www.cnblogs.com/caoguo