洛谷1594 护卫队

本题地址: http://www.luogu.org/problem/show?pid=1594

题目描述

护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。每辆车的重量是已知的。任何一组车队的重量之和不能超过桥的最大承重量。被分在同一组的每一辆车都以其最快的速度通过该桥。一组车队通过该桥的时间是用该车队中速度最慢的车通过该桥所需的时间来表示的。问题要求计算出全部护卫车队通过该桥所需的最短时间值。

输入输出格式

输入格式:

输入文件第一行包含三个正整数(用空格隔开),第一个整数表示该桥所能承受的最大载重量(用吨表示);第二个整数表示该桥长度(用千米表示);第三个整数表示该护卫队中车辆的总数(n<1000)。接下来的几行中,每行包含两个正整数W和S(用空格隔开),W表示该车的重量(用吨表示),S表示该车过桥能达到的最快速度(用千米/小时表示)。车子的重量和速度是按车子排队等候时的顺序给出的。

输出格式:

输出文件应该是一个实数,四舍五入精确到小数点后1位,表示整个护卫车队通过该桥所需的最短时间(用分钟表示)。

输入输出样例

输入样例#1:

100 5 10

40 25

50 20

50 20

70 10

12 50

9 70

49 30

38 25

27 50

19 70

输出样例#1:

75.0

【思路】

线性DP。

首先明确本题并不需要划分成指定集合数,区别于“划分型DP”。

设d[i] 表示i及之前的车通过所需最少时间,则有转移方程:

d[i]=min{ d[j]+L/minv(j+1,i) }

如果不算计算minv的话时间为O(n^2),这里考虑如何计算minv。注意到我们的j是倒序枚举的,所以直接可以用一个_min记录j..i之间的最小值而不是每次都独立计算。因此minv只需要O(1)的时间就可以得到。

【代码】

 1 #include<iostream>
 2 #include<cstdio>
 3 #define FOR(a,b,c) for(int a=(b);a<=(c);a++)
 4 using namespace std;
 5
 6 typedef long long LL;    //w之和爆int
 7 const int maxn = 1000+10;
 8 const double INF=1e9;
 9
10 double d[maxn];
11 LL w[maxn],v[maxn];
12 LL n,L,W;
13
14 int main() {
15     ios::sync_with_stdio(false);
16     cin>>W>>L>>n;
17     FOR(i,1,n) cin>>w[i]>>v[i] , d[i]=INF;
18
19     d[0]=0.0;
20     FOR(i,1,n)
21     {
22         d[i]=d[i-1]+((double)L/v[i]);
23         LL tot=w[i];
24         LL _min=v[i];
25         for(int j=i-1;j;j--) {
26             tot+=w[j]; if(tot>W) break;
27             _min=min(_min,v[j]);
28             d[i]=min(d[i],d[j-1]+(double)L/_min);
29         }
30     }
31     printf("%0.1lf\n",d[n]*60.0);
32     return 0;
33 } 

洛谷1594 护卫队相关推荐

  1. 洛谷1594 护卫队_区间dp_题解

    护卫队 出自洛谷题库 https://www.luogu.com.cn/problem/P1594 [问题描述] 不是具体题目 大概就是有n个车要过河,只有一个桥(理论上只能单向通行,其实不用管对面) ...

  2. 洛谷1594 护卫队 (st算法)

    评测链接:http://www.luogu.org/problem/show?pid=1594 题目描述 Description 护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥.因为街道是 ...

  3. 洛谷1594 护卫队(动态规划) 解析

    题目 护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥.因为街道是一条单行道,所以任何车辆都不能超车.桥能承受一个给定的最大承载量.为了控制桥上的交通,桥两边各站一个指挥员.护卫车队被分成几 ...

  4. 洛谷 P1594 护卫队

    题目描述 护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥.因为街道是一条单行道,所以任何车辆都不能超车.桥能承受一个给定的最大承载量.为了控制桥上的交通,桥两边各站一个指挥员.护卫车队被分 ...

  5. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  6. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  7. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  8. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  9. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

最新文章

  1. 比特币现金成为第二个最有价值的区块链
  2. PHP Notice: undefined index 解决方法
  3. Python中DataFrame关联
  4. centos7下qt creator python配置
  5. 【视频编解码:新标准 新应用】未来可期
  6. swift学习笔记《5》- 实用
  7. 反向代理分离资源服务器分析
  8. an error occurred while contacting the respository
  9. Pale Transformer: A General Vision Transformer Backbone with Pale-Shaped Attention
  10. Win10以太网没有有效的IP配置解决方法
  11. asp.net 设计音乐网站
  12. iPhone 12手机真实信号强度查看方法教程
  13. 创蓝253云通讯paas平台PHP短信接口demo分享
  14. 又一个阿里云盘资源搜索引擎实现效果展示
  15. ISP 图像信号处理器数字IP实现
  16. 用Keras解决机器学习问题!
  17. 微信商城后台服务器在那儿里,第3讲 微信商城云服务器后台创建
  18. 为什么回退N步(GBN)协议和选择重传(SR)协议的发送窗口有限制
  19. 使用广度优先搜索找到最短路径
  20. Android开发环境搭建详细图解

热门文章

  1. C语言:顺序程序设计(思维导图)——数据的表现形式及运算、运算符和表达式~~ 铁汁们可以观看图片和文件进行观看思维导图哈
  2. bnuoj_4047 魔方系列——相同高度
  3. linux 修复yum,centos7.5 (目前我用过的最高版本)修复yum
  4. 信号完整性研究系列--什么是地弹
  5. AutoJS实现淘金币任务,双十二任务
  6. 【Linux】Linux网络编程(含常见服务器模型,下篇)
  7. L9170是一款DC双向马达驱动电路大输出电流5A原厂规格书资料
  8. 继电器模块和L298N电机驱动模块的使用
  9. 服务器ssd硬盘的读写速度,SSD完胜HDD:读写速度和IOPS对比
  10. Fiddler-Windows系统本地抓包