P1223 排队接水

博客探讨了如何安排队伍,使人们在打水时的平均等待时间最小化。通过证明,得出结论打水时间短的人应优先打水,以此达到最优化。并提供了完整的解题思路和代码实现。
摘要由CSDN通过智能技术生成

题目链接

P1223 排队接水

题目梗概

一些人去排队打水,每个人所需打水的时间为time[i],问如何排列这些人,可以使得平均等待时间最少。

解题思路

方案是,打水时间少的优先打水。
证明:设n个人的打水时间为:T1,T2,T3…Tn(已按从小到大排序)。
第2个人等待时间为:T1;
第3个人等待时间为:T1 + T2;
第4个人等待时间为:T1 + T2 + T3;

第n个人等待时间为: T1 + T2 + T3 + … + T(n-1);
则所有人的总等待时间为 T = (n-1)*T1 + (n-2)*T2 + (n-3)*T3 + … + T(n-1);
假设现在排列T1 T2 … Ti … Tj … Tn(i<j)不是最优
而是另一种T1 T2 … Tj… Ti … Tn(交换了Ti和Tj的顺序),
第一个方案的总等待时间为Ts1 = (n-1)*T1 + (n-2)*T2 + … + (n-i)*Ti + … + (n-j)*Tj + … + T(n-1);
第二个方案的总等待时间为Ts2= (n-1)*T1 + (n-2)*T2 + … + (n-i)*Tj + … + (n-j)*Ti+ … + T(n-1)
将两个式子相减来比较大小,得
D = Ts1 - Ts2 = (n-i)Ti + (n-j)Tj - (n-i)Tj - (n-j)Ti = (n-i)(Ti - Tj) + (n-j)(Tj - Ti) = (n-i-n+j)(Ti-Tj) < 0;
看到第一个方案等待时间更短,与题设不符,原排列最优。

完整代码

#include <iostream>
#include 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值