目录

  • 题目描述
  • 输入格式
  • 输出格式
  • 样例
  • Solution
  • AC Code

题目描述

现有N辆车要按顺序通过一个单向的小桥,由于小桥太窄,不能有两辆车并排通过。另外,由于小桥建造的时间已经很久,只能承受有限的重量,记为Max(吨)。管理员将N辆车按初始的顺序分组,每次让一个组过桥,并且只有在一个组的车辆全部过桥后,下一组车辆才能上桥。每辆车的重量和最大速度是已知的,而每组车的过桥时间由该组中速度最慢的那辆车决定。请你帮管理员编一个程序,将这N辆车分组,使得全部车辆通过小桥的时间最短。

输入格式

第一行有3个数字,分别为Max(吨),Len(桥的长度,单位km),N(3个数之间用一个或多个空格隔开)。

接下来又N行,每行两个数,第i行的两个数分别表示第i辆车的重量w(吨)和最大速度v(km/h)。

max,len,w,v不超过32位有符号整数类型的最大值,且为整数n<1000

输出格式

全部车辆通过小桥的最短时间(minute),精确到小数点后一位。

样例

样例输入

100 4 10
40 25
50 20
50 20
70 10
12 50
9 70
49 30
38 25
27 50
19 70

样例输出

60.0

Solution

题目要求按照初始的顺序分组,所以必须按照 1∼n1\sim n1∼n 的顺序过桥,所以设 f[i]f[i]f[i] 表示从 111 到 iii 需要花费的最小时间,则可以先预处理出每一组车 [i,j][i,j][i,j] 在不考虑重量限制的情况下的通过时间 g[i,j]g[i,j]g[i,j],则状态转移方程为:
g[i,j]=max(g[i,j−1],g[j,j])f[i]=min⁡1≤j≤i{f[j−1]+g[j][i]}\begin{matrix} g[i,j]=max(g[i,j-1],g[j,j])\\\\ f[i]=\min\limits_{_{1\le\ j\ \le\ i}}\left\{ f[j-1]+g[j][i]\right\} \end{matrix}g[i,j]=max(g[i,j−1],g[j,j])f[i]=1≤ j ≤ i​min​{f[j−1]+g[j][i]}​

初值:f[i]=INF,g[i,i]=Time(i)f[i]=\mathrm{INF},g[i,i]=Time(i)f[i]=INF,g[i,i]=Time(i)
目标:f[n]f[n]f[n]


AC Code

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;const int N=1005;int m,n;
int s[N];
double g[N][N],f[N],l,v;int main()
{scanf("%d%lf%d",&m,&l,&n);for(register int i=1;i<=n;i++){scanf("%d%lf",&s[i],&g[i][i]);s[i]+=s[i-1];g[i][i]=(l/g[i][i])*60;}for(register int i=1;i<=n;i++){for(register int j=i+1;j<=n;j++)g[i][j]=max(g[i][j-1],g[j][j]);}for(register int i=1;i<=n;i++){f[i]=1e9; //double不要用memsetfor(register int j=1;j<=i;j++)if(s[i]-s[j-1]<=m) f[i]=min(f[i],f[j-1]+g[j][i]);}printf("%.1lf\n",f[n]);return 0;
}

【DTOJ Begin】1019. 过桥(bridge)相关推荐

  1. 迁移wordpress_WordPress迁移变得容易

    迁移wordpress In this article, we're going to cover the various ways you can migrate your website to W ...

  2. TurtleBot3 循线机器人

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 TurtleBot3 循线机器人 前言 一.按装TurtleBot3 二.传感器的使用 三.循线设计 四.循线脚本 总结 前言 由于时 ...

  3. 【水】uva10037 过桥

    给出n个人所需过桥的时间,每次最多两人过桥,过桥时间为最长的人的时间.求最快所有人全部过桥方案. 贪心.先从小到大排,易知 n=1 时 ans=a[1] n=2,ans=max(a[1],a[2]) ...

  4. codevs——1019 集合论与图论

    1019 集合论与图论  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 集合论与图论对于小松来说是比数字 ...

  5. HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)

    HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge Solution 我们考虑维护在环上的边的个数,答案就是总边数减去环上边数. 环的形态是这样的:(0,l),(0,l+1)...(0 ...

  6. C++学习之路 | PTA乙级—— 1019 数字黑洞 (20分)(精简)

    1019 数字黑洞 (20分) 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这 ...

  7. Java 多线程 南北多人过桥

    有一个南北走向的桥,南边有4人,北边有3人,分别让他们到达对面,桥只能容纳一人通过.显示出每个人的过桥状态. TestBridge.java class PersonPassBridge extend ...

  8. 1019 数字黑洞 (20)

    给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞&qu ...

  9. 【DTOJ】2701:问候

    DTOJ 2701:问候  解题报告 2017.11.08 第一版 --由翱翔的逗比w原创,引用yzl_rex的CSDN博客 题目信息: 题目描述 问候人类! 输入 输入一行,一个名字,如human( ...

最新文章

  1. 如何从Oracle数据库中的表中获取列名(字段名)列表?
  2. JAXB 转 XML乱码
  3. SQL Server中count(*), count(col), count(1)的对比
  4. MongoDB对文档的操作
  5. [转]chroot的使用
  6. murmur3 php,MySQL5.7 切不要乱射 --transaction-write-set-extraction=MURMUR32
  7. 栈空间_Linux中的进程栈和线程栈
  8. java 蓝桥杯算法训练 快速排序
  9. 格雷码 Gray Code
  10. java线程的状态改变(练习)
  11. 好看兼好用的编程专用字体
  12. Hadoop综合大作业
  13. Shell编程之正则表达式与文本处理器(一)
  14. openresty 网关rsa+aes+redis鉴权解密
  15. 计算机的文件怎么加密码怎么设置,文件夹怎么设置密码,教您怎么设置
  16. 【Latex】将TIF文件转换成EPS文件
  17. python监听多个udp端口_尝试实现非阻塞python-udp多端口获取wierd异常
  18. 统计正数和负数的个数然后计算这些数的平均值。
  19. eclipse 创建java窗体_eclipse新建窗体类
  20. 计算机认知矫正发展史,计算机认知矫正疗法对儿童认知功能的影响.pdf

热门文章

  1. socket 科普文章
  2. 全球及中国镱 (Yb) 蒸发材料行业深度研究及未来发展趋势调研报告2021年版
  3. oracle数据库中的回收站,Oracle 10G 中的"回收站"-数据库专栏,ORACLE
  4. jq和js的关系_jQuery与JavaScript有什么关系?
  5. 计算机管理找不到防火墙,手把手解答win10系统防火墙服务找不到的问题
  6. 基于FFmpeg+SDL的视频播放器的制作-基础知识
  7. i5 11300H和r5 5500u的差距大不大
  8. 亵渎小说介绍_从PHP过渡到:亵渎神灵,虚张声势还是常识?
  9. java 虚拟机JVM
  10. c语言倍增算法,用倍增公式选股