题目

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

输入格式:

输入文件第一行包含三个正整数(用空格隔开),第一个整数表示该桥所能承受的最大载重量(用吨表示);第二个整数表示该桥长度(用千米表示);第三个整数表示该护卫队中车辆的总数(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

思路

这道题的题面比较长,我们先来简单梳理一下题目的意思:
有一个长为n的车队,要在车辆顺序不变(不能超车)的情况下把它分为若干个小车队过桥,桥上只能有一个车队
这样我们很自然的就想到用动态规划来解决这道题,抽象地讲就是把一个数列分为若干份,动态规划的目的就是找到分开小车队的断点,具体的操作方法请看注释

注释代码

#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 1005
using namespace std;int maxw,n;
double x,y,len;
double w[MAXN],s[MAXN];
double f[MAXN];
/*
w[i]表示前1~i辆车的重量之和
s[i]表示第i辆车通过桥所需要的时间(单位:分钟)
f[i]表示前i辆车通过桥的最短时间
*/int main()
{cin>>maxw>>len>>n;for (int i=1;i<=n;i++){cin>>x>>y;w[i]=w[i-1]+x;s[i]=len/y*60.00000;//注意题目中要求的是分钟,单位要转化 }for (int i=1;i<=n;i++){f[i]=999999999999999.0;//题目数据坑爹,初始值一定要这么大,否则会挂1~2个点 }for (int i=1;i<=n;i++){            //依次一辆一辆车枚举 double mint=-999999999999999.0;//mint表示车队中最慢车过桥需要的时间 for (int j=i;j>=1;j--){        //枚举i之前的每一辆车,相当于找到断点 if (w[i]-w[j-1]>maxw){     //如果车队重量大于桥的最大承受重量,跳过 break;}else{mint=max(mint,s[j]); f[i]=min(f[i],f[j-1]+mint);// f[i-1]+mint相当于将前i辆车分为1~j-1,j~i两个车队 }}}printf("%0.1lf\n",f[n]);
}

洛谷1594 护卫队(动态规划) 解析相关推荐

  1. 洛谷1594 护卫队

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

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

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

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

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

  4. 洛谷P1130 红牌 动态规划

    洛谷P1130 红牌 动态规划 状态转移方程   dp[ j ][ i ] = dp[ j-1 ][ i-1 ] + dp[ j ][ i-1 ]   然后 1 的时候判一下就行 1 #include ...

  5. 对于洛谷提高试炼场-动态规划篇的爆破

    题外话 由于本蒟蒻的动态规划实在是太弱啦,所以有必要爆破一下洛谷提高试炼场.里面有很多非常好,难度也合适的动态规划题--(然而你还是抄了不少题解) niconiconi~让我们一起开始爆破吧. lv- ...

  6. 【洛谷】【动态规划/二维背包】P1855 榨取kkksc03

    [题目描述:] ... (宣传luogu2的内容被自动省略) 洛谷的运营组决定,如果...,那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkks ...

  7. 洛谷 P1594 护卫队

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

  8. 【洛谷】【动态规划+单调队列】P1725 琪露诺

    [题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...

  9. 2018.12.5【WC2017】【LOJ2286】【洛谷P4604】挑战(卡常)

    洛谷传送门 LOJ传送门 解析: 目前LOJ速度rank1.但是洛谷上面有两个40msAC的在我前面(空间还小的出奇,估计连排序的数组都存不下)...估计是面向数据编程.. 说明:博主是一个高一OIE ...

最新文章

  1. 敲代码括号技巧_阅码神奇Souceinsight使用小技巧总结
  2. Spring3.x与jdk8兼容问题
  3. CSS布局--head区的其他设置
  4. 动态注册客户端脚本的方法
  5. AI需求强劲 AI芯片市场规模有望达到405亿
  6. BellmanFord
  7. 新闻发布项目——接口类(commentDao)
  8. Oracle 11g RAC 第二节点root.sh执行失败后再次执行root.sh
  9. django入门记录 2
  10. devexpress gridcontrol 内置导航栏,双击后才修改数据
  11. 拆分列成多行_把订单按货品拆分成多行(上)
  12. 看看30万码农怎么评论:培训出来的程序员真的很渣吗?
  13. jquery load 事件用法
  14. 顶点计划:寝室作息讨论
  15. python的变量在使用前不需要先赋值_每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。_学小易找答案...
  16. NEC加入美国国土安全局AIS网络威胁信息官民共享体系
  17. 2018年回顾和收获
  18. Python:统计正负数个数
  19. Sentry 清理数据
  20. 图书管理系统——C语言课程设计

热门文章

  1. 给命令行(cmd)做一个GUI——Process的应用
  2. LeetCode BackPack 背包问题
  3. 可调电阻的检测方法总结
  4. 6款超强国外免费网盘推荐
  5. python实现jpg、png等图片格式转为PDF
  6. 儿童台灯哪个品牌更护眼推荐?四款眼科专家推荐的护眼台灯
  7. html5 模仿苹果桌面,JavaScript模仿桌面窗口
  8. 企业微信怎么用?企业微信管理工具哪个好?【百问百答】
  9. androidstudio图片居中_android imageview图片居中技巧应用
  10. mysql sql查询 sleep_mysql中sleep连接过多,Ufiner查询无数据