动态规划 --- 车队过桥

这篇博客探讨了一个车队过桥的问题,其中涉及到动态规划的运用。博主在解决这个问题时,由于单位误解导致了计算结果与示例不符。经过修正,博主找到了正确的动态规划思路,并列出需要修改的源码部分,包括更改距离单位、速度类型以及输出结果的转换。题目要求将车队按重量分组,确保不超过桥的限重,并以最慢车辆的速度过桥。最终得出正确答案为1250秒。
摘要由CSDN通过智能技术生成

网上有这道题的描述,并且给了一组示例数据。我以示例数据作为输入,得到的输出与它给的输出不同。于是仔细解了一下。


重新在网上搜索之后,发现速度单位是km/h。要求输出单位是分。这样子的话,我的计算结果就是对的。

思路不需要改变,还是动态规划。

源码需要改变:

1. 将函数getInputData()中的distance *= 1000删除

2. 输入的速度可以是浮点数。将carinfo中的speed改为float类型,同时将getInputData中获取速度的形式化参数改为"%f"

3. 将函数outputResult的输出结果改为minTime*60


题目:

一个车队中有N辆卡车要过桥,N<1000。桥比较窄,不能并排过车,也不能超车。因此,不能调整车在车队的序号。比如将原第一辆车放在末尾。桥限重不能让所有的车同时通过。因此,必须将车队划分成多个分组。每个分组的总重量都不能超过桥的限重。前一个分组的车完全通过桥后,才能下一个分组的车通过桥。分组的移动速度由最慢的车决定。

输入:桥的长度,桥的限重;车队中的车数;每辆车的重量、行驶速度。
输出:车队通过桥的最短时间。
100, 5Km10辆车,
1 40t 25m/s
2 50t 20m/s
3 50t 20m/s
4 70t 10m/s
5 12t 50m/s
6 9t 70ms
7 49t 30m/s
8 38t 25m/s
9 27t 50m/s
0 19t 70m/s

最短时间为:75s。

首先,证明这道题具有最优子结构。
第一个观点,如果m...n编号的车可以组成一个分队过桥,那么将m...n组成一个分队过桥耗时是最短的。
证明:假设编号为k的车是行驶速度最慢的为minSlowSpeed。如果是组成一个分队,那么车队过桥耗时为distance/minSlowSpeed。如果是分成多个分队,那么车队耗时是distance/minSlowSpeed+otherPackageTime>distance/minSlowSpeed。
第二个观点,如果需要将m...n编号的车组成2个分队m...k, k+1...n过桥,那么当m...k按照最小耗时分队过桥且k+1...n按照最小耗时分队过桥的情况下,m...n过桥时间最短。

得到到动态规划方程为:
if (sumOfWeight(m, n) < capacityOfWeight)
{
P(m, n) = max{P(m, m), P(m+1, m+1), ..., P(n, n)};
}
else
{
P(m, n) = min {P(m, m) + p(m+1, n), p(m, m+1)+p(m+2, n), ..., p(m, n-1)+p(n, n)};
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值