Skiing(最短路)
| Time Limit: 1000MS | Memory Limit: 65536K | |||
| Total Submissions: 4921 | Accepted: 1315 | Special Judge | ||
Description
Bessie starts out travelling at a initial speed V (1 <= V <= 1,000,000). She has discovered a remarkable relationship between her speed and her elevation change. When Bessie moves from a location of height A to an adjacent location of eight B, her speed is multiplied by the number 2^(A-B). The time it takes Bessie to travel from a location to an adjacent location is the reciprocal of her speed when she is at the first location.
Find the both smallest amount of time it will take Bessie to join her cow friends.
Input
* Lines 2..R+1: C integers representing the elevation E of the corresponding location on the grid.
Output
Sample Input
1 3 3 1 5 3 6 3 5 2 4 3
Sample Output
29.00
Hint
Start at 1,1 time 0 speed 1
East to 1,2 time 1 speed 1/16
South to 2,2 time 17 speed 1/4
South to 3,2 time 21 speed 1/8
East to 3,3 time 29 speed 1/4
滑雪
时间限制:1000MS内存限制:65536k
总提交:4921接受:1315特别法官
描述
Bessie和其他农场主约翰的母牛今年冬天要去滑雪。有一天,贝西发现自己在左上角的R(1 25 = R = = 100)由C(1 = C = C =)网格海拔E(-电子= 25)。为了加入FJ在discow党的其他牛,她必须到右下角,很快她可以通过旅行只有北,南,东,西。
Bessie以初始速度V开始旅行(1 < V = V = 1000000)。她发现她的速度和海拔变化之间有着显著的关系。当Bessie从一个高度位置八B相邻的位置,她的速度乘以2号^(A-B)。Bessie从一个地点到另一个地点旅行的时间是她在第一个位置时速度的倒数。
找到两个最小的时间将采取贝茜加入她的牛朋友。
输入
*第1行:三个空间分离的整数:V,R和C,分别代表Bessie的初始速度和网格中的行和列的数目。
*行2 + R + 1:C整数表示网格上的相应位置的海拔E。
输出
一个单数值,打印到两个完全小数的位置:Bessie可以到达网格右下角的最小时间。
样本输入
1 3 3
1 5 3
6 3 5
2 4 3
示例输出
二十九
提示
Bessie的最佳路线是:
开始时1时0速度1
东到1,2时间1速度1 / 16
南至2时间17速度1 / 4
南至3,2时间21速度1 / 8
东3时间29速度1 / 4
源
usaco 2005十月黄金
首先我们需要证明的是从左上角出发到R*C网格中其他任意一点的速度都是固定的.对于下面的矩阵:
1 5 3
6 3 5
2 4 3
我们想计算到数值为6的点时的速度? 从1->6的话 v6=v1*2^(1-6)
而从1->5 5->3 3->6 的话 v6=v1*2^(1-5) * 2^(5-3) * 2^(3-6)=v1*2^(1-6)
相等,同理我们可以证明到任意点的速度为:
v(i,j)= v1*2^(1号点与该点的海拔之差)
既然任意点的速度都是固定的,那么从该点到它的4个方向的边的时间开销也是固定的.
直接建立该无向图,计算出对应每条边的时间开销,然后用最短路算法计算从0号节点到R*C-1点的最短距离(时间开销)即可.
过程中注意将该网格转换为一个节点编号的无向图的方法.
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 105
#define maxn 9000000000//妈的,极大值开小了,卡了我一个多小时!交了6遍一直wa
using namespace std;
int n,m,v,a[N][N];
double dis[N][N];
bool vis[N][N];
]={-,,,},y[]={,,,-};
struct Node
{
int x,y;
double t,v;
Node (int x,int y,double t,double v)
{
this->x=x;
this->y=y;
this->t=t;
this->v=v;
}//结构体的初始化,只能在第一次调用结构体的时候使用
friend bool operator < (Node a,Node b)
{
if(a.t==b.t)
return a.v<b.v;
return a.t>b.t;
}// operator重载运算符,只要调用到该结构体,就会按照结构体中重新定义的<进行操作。
};
void dijsktra()
{
priority_queue<Node> q;
q.push(Node(,,,v));
while(!q.empty())
{
Node p=q.top();
q.pop();
if(vis[p.x][p.y]) continue;
vis[p.x][p.y]=;
;i<;i++)
{
int xx=p.x+x[i];//向四个方向扩展该店的路径 ,可看成横坐标。
int yy=p.y+y[i];//向四个方向扩展该点的路径,可看成纵坐标。
||xx>n||yy<||yy>m) continue;//若要扩展的点超出了这个网格的范围,略过。
if(vis[xx][yy]) continue;//若该点已经访问过,略过。
if(dis[xx][yy]>p.t+1.0/p.v)//求最短路!term.t原就消耗的时间,1.0/term.v 到该点的时间。
{
dis[xx][yy]=p.t+1.0/p.v;
q.push(Node(xx,yy,dis[xx][yy],p.v*pow(2.0,a[p.x][p.y]-a[xx][yy])));
//继续扩展
}
}
}
}
int main()
{
while(scanf("%d%d%d",&v,&n,&m)!=EOF)//有好几组数据!!
{
;i<=n;i++)
;j<=m;j++)
{
scanf("%d",&a[i][j]);
dis[i][j]=maxn;//初始化,边放数边初始,比起先两个for循环初始较快
}
memset(vis,,sizeof(vis));
dis[][]=;//由于是从四方格的最左上角开始走,那样到该点的时间一定是0;
dijsktra();
printf("%.2f\n",dis[n][m]);//到达最后右下角所用的时间。
}
;
}
Skiing(最短路)的更多相关文章
- 【POJ3037】Skiing 最短路
题意: 有个n*m的滑雪场,bessie要从(1,1)滑到(n,m),问最小时间. 起始有一个速度v,然后每从一个点A到一个点B(仅仅能上下左右走,每次一格),速度就会乘上2^(权值A-权值B). 然 ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- POJ 3037 Skiing(如何使用SPFA求解二维最短路问题)
题目链接: https://cn.vjudge.net/problem/POJ-3037 Bessie and the rest of Farmer John's cows are taking a ...
- POJ - 3037 Skiing SPFA
Skiing Bessie and the rest of Farmer John's cows are taking a trip this winter to go skiing. One day ...
- 最短路&查分约束
[HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...
- bzoj1001--最大流转最短路
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...
- Sicily 1031: Campus (最短路)
这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...
- 最短路(Floyd)
关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...
随机推荐
- OpenCV中的图像形态学转换
两个基本的形态学操作是腐蚀和膨胀.他们的变化构成了开运算,闭运算,梯度等.下面以这张图为例 1.腐蚀 这个操作会把前景物体的边界腐蚀掉. import cv2 import numpy as np i ...
- i2c drivers
Linux设备驱动程序架构分析之一个I2C驱动实例 转载于:http://blog.csdn.net/liuhaoyutz 内核版本:3.10.1 编写一个I2C设备驱动程序的工作可分为两部分 ...
- POJ:3228-Gold Transportation(要求最小生成树最大边最小)
Gold Transportation Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3079 Accepted: 1101 D ...
- P2014 选课(树形背包)
P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有 ...
- 【Netty】NIO框架Netty入门
Netty介绍 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...
- 链表中倒数第k个结点 【微软面试100题 第十三题】
题目要求: 输入一个链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针. 参考资料:剑指offer第15题 题目分析: 1.两个指针,第一个先走k步,然后两个指针同时走,直到第一个走 ...
- 记一次WMS的系统改造(2)-敲定方案
既定改造方案 基于上一篇分析出的种种问题,我们将库房人员的系统操作划分为两大类. 第一类为货物驱动的操作,这类操作主要随着货物而前进,人员不看或者看软件的次数比较少,更多是对货物的状态进行系统上的确认 ...
- Leetcode17--->Letter Combinations of a Phone Number(电话号码对应的字母的组合)
题目: 给定一个数字字符串,返回数字所能代表的所有字母组合: 举例: Input:Digit string "23" Output: ["ad", " ...
- MacOS常用软件推荐
1.效率提升神器Alfred 可以搜索文件.应用.web搜索.词典等等 链接:https://pan.baidu.com/s/1igv4tuXkuMFOPT9E6Cc5Jg 密码:3o51 软件解压密 ...
- PHP curl 封装 GET及POST方法很不错的
<?php function curl_get($url, array $params = array(), $timeout = 5) { $ch = curl_init(); curl_se ...