动态规划 乘电梯 记忆化搜索
2017-10-13 14:48
204 查看
动态规划 乘电梯
题目描述
你拼命地工作到半夜,该回家了。你的办公室在摩天大楼的顶层。大楼有电梯系统。每部电梯工作的楼层是不一样的。每个电梯匀速运动,每上下一层的时间都是一个单位。现在你是大楼里唯一使用电梯的人。电梯随机地停在任意一个可能的位置。按下按钮,等一会儿电梯就会到了。显然电梯到的快慢取决于你在哪一层楼。你在某电梯服务范围的最高层会比在中间的时候等待更长的时间。更精确地,如果你的上面有a层楼,你的下面有b层楼,那么预计的等待时间将是:你得写一个程序,计算下楼的最短时间。假设进出电梯和换电梯都不需要时间。
输入
第一行是电梯的数量和大楼层数。然后每行是一个电梯服务的最低层和最高层。最多有200个电梯,大楼不超过1000层。
显然问题是有解的。不然你是怎么上去的呢?
输出
最短时间。精确到5位小数。样例输入
6 15 4 8 10 14 1 5 7 11 13 15 1 13
样例输出
20.32308
提示
要考noip了 宝宝来水题。。。
随手水一个记忆化搜索 。。。
#include<cmath>
#include<ctime>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<string>
#include<bitset>
#include<queue>
#include<set>
#include<map>
using namespace std;
typedef double db;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
void print(int x)
{if(x<0)putchar('-'),x=-x;if(x>=10)print(x/10);putchar(x%10+'0');}
const int N=1010;
int fr
,to
,n,m;
bool book
;
db f
;
db dp(int x)
{
if(book[x])return f[x];
for(int i=x+1;i<=n;++i)
{
for(int j=1;j<=m;++j)
if(fr[j]<=x&&to[j]>=x&&fr[j]<=i&&to[j]>=i)
f[x]=min(f[x],dp(i)+(i-x)+((to[j]-i+1)*(to[j]-i)+(i-fr[j])*(i-fr[j]+1))/(2.0*(to[j]-fr[j]+1)));
}
book[x]=1;
return f[x];
}
int main()
{
m=read();n=read();
for(int i=1;i<=m;++i){fr[i]=read();to[i]=read();}
memset(f,0X7f,sizeof(f));
book
=1;f
=0;
printf("%.5lf\n",dp(1));
return 0;
}
/*
6 15 4 8 10 14 1 5 7 11 13 15 1 13
20.32308
*/
相关文章推荐
- UVA 10285 Longest Run on a Snowboard(记忆化搜索|动态规划入门)
- CF917B 动态规划 记忆化搜索
- 【动态规划】【记忆化搜索】CODEVS 3415 最小和 CodeVS原创
- [算法]最优矩阵链乘(动态规划 记忆化搜索)
- 记忆化搜索,动态规划(巴比伦塔,uva 437)
- 【动态规划】【记忆化搜索】hdu5965 扫雷
- 记忆化搜索,动态规划(旅行,uva 1347)
- DFS——>记忆化搜索——>动态规划
- 矩形嵌套-记忆化搜索(dp动态规划)
- poj 1088 记忆化搜索||动态规划
- 动态规划____有重叠子问题的搜索,都可以转为记忆化搜索
- 【动态规划】【记忆化搜索】CODEVS 1011 数的计算 2001年NOIP全国联赛普及组
- 南阳理工acm 1070诡异的电梯【Ⅰ】(动态规划)
- HDU - 1978 How many ways(动态规划或记忆化搜索)
- poj 1088 记忆化搜索||动态规划
- 【动态规划】【记忆化搜索】CODEVS 1010 过河卒 2002年NOIP全国联赛普及组
- Leetcode-64_. Minimum Path Sum(最小路径和)—动态规划解法+记忆化搜索解法-C++解
- [Sicily 1176 Two Ends] 动态规划 记忆化搜索
- 矩形嵌套-记忆化搜索(dp动态规划)
- 百炼-1088-滑雪-C语言-动态规划-记忆化搜索