题目描述
护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。

为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队到达了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。

每辆车的重量是已知的。任何一组车队的重量之和不能超过桥的最大承重量。被分在同一组的每一辆车都以其最快的速度通过该桥。一组车队通过该桥的时间是用该车队中速度最慢的车通过该桥所需的时间来表示的。

问题要求计算出全部护卫车队通过该桥所需的最短时间值。

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

接下来的几行中,每行包含两个正整数W和S(用空格隔开),W表示该车的重量(用吨表示),S表示该车过桥能达到的最快速度(用千米/小时表示)。 车子的重量和速度是按车子排队等候时的顺序给出的。

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


由于这条路上不能超车,也就是说分组必然严格地划为一段段连续的区间,那么很显然,这是一个线性问题。

设 f[ i ] 表示 1~i 通过的最小用时,得状态转移方程:

f[ i ]=min{ f[ j ]+ maxt }; 1<=j<=i,maxt表示 j~i 的最慢的车的用时。即:我们把 j~i 分为了一组。

这一定是最优的,因为在负重不炸的情况下,我们总希望更多的车能一起通过。

然后,没有了吧,code:

#include<bits/stdc++.h>
using namespace std;int sw,l,n;
struct car
{int w;double t;
}a[1010];
double f[1010];inline void read (int &x)
{x=0;int f=1;char s=getchar();for(;s<'0'||s>'9';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=(x<<3)+(x<<1)+s-48;x*=f;
}void init()
{read(sw);read(l);read(n);for(int i=1;i<=n;++i){int x;read(a[i].w);read(x);a[i].t=1.000*l/x;}
}void work()
{memset(f,127,sizeof(f));f[0]=0.000;for(int i=1;i<=n;++i){double maxx=0.000;long long now_w=0LL;for(int j=i;j>=1;--j){maxx=max(maxx,a[j].t);//最慢的车的用时。now_w+=a[j].w;//该组总重。if(now_w>sw) break;//桥塌了。f[i]=min(f[i],f[j-1]+maxx);}}printf("%.1lf",f[n]*60);
}int main()
{init();work();return 0;
}

luogu 1594 护卫队(线性dp)相关推荐

  1. 洛谷1594 护卫队

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

  2. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  3. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  4. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  5. CodeForces - 1096D Easy Problem(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...

  6. CodeForces - 456C Boredom(线性dp)

    题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...

  7. POJ - 1050 To the Max(最大连续子段和,线性dp)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...

  8. 牛客 - 「火」皇家烈焰(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...

  9. CH 5102 Mobile Service(线性DP)

    CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...

最新文章

  1. 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)
  2. 金立M2017续航出色不仅是因为电池大,还有超强快充
  3. 如何用MathType插入公式编号
  4. Ubuntu访问Windows共享文件夹
  5. 拯救颓废假期!快来和我们一起刷论文写笔记
  6. 为什么要选择学Web前端?无法反驳的4大理由
  7. BBR如何让Spotify流媒体更流畅?
  8. {php mysql}
  9. SAP License:一个 SAP 新手的困惑
  10. 南阳oj题目20吝啬的国度 菜鸟的进阶之路
  11. C UDR 的内存分配
  12. echarts 半圆形进度条
  13. 计算机程序无法响应如何解决,电脑卡死出现应用程序未响应不可以正常工作怎么办?...
  14. 公式图片识别转换工具
  15. 汽车嵌入式软件自动化测试的方法及推荐工具
  16. 计算机考研初试350分什么水平,考研分数,考研350分什么水平!
  17. 今天会是有offer的一天么:计算机网络面试问题集锦
  18. Python各种包学习
  19. 教务系统一键评教案例分析
  20. python 统计哈姆雷特词汇频率

热门文章

  1. C语言如何做到四舍五入保留小数
  2. Spring Boot配置绑定
  3. 小红书怎么找素人?素人投放应注意什么
  4. CSS 经典布局(两栏布局 + 三栏布局 + 圣杯布局 + 双飞翼布局)
  5. SuperMap iDesktop 从零开始创建 C# 类库进行插件开发
  6. dw改透明度_DW的透明及隐藏的方法
  7. linux序列拼接软件,批量序列拼接工具:CAP3/PCAP下载
  8. 朱乐睿教授阐述杜工部全集
  9. 中国所有城市(json数据)
  10. HAL库使用硬件SPI驱动0.96寸OLED stm32F401