POJ 1700 解题报告——Crossing River:求过河的最少时间问题

解决一个关于N人使用一艘船过河的问题,每次船最多载2人。通过比较不同策略的时间成本,确定如何以最短时间运送所有人过河。当N=3时,最快的人分两趟运输其他人;对于N>=4,考虑两人一组过河,对比两种策略来选择最优方案。代码实现采用C语言。
摘要由CSDN通过智能技术生成

        题目是说有N个人用一条船过河,船每次最多只能载2人,所以得多次来回穿梭才能将所有人运过河。为了减少所花时间,一般两人一起坐船过河,然后其中较快的一人划回来。

当N = 1,2 时,直接过河;

当N = 3 时,最快的人分两趟将另两人运过河;

当N >= 4 时:因一次可以载两人过河,故可以两人过河看作一个基本单位。每次用最短时间把最慢的两人运过河后,直至剩余人数小于4。设当前N人中最快与次快的两人所用时间分别为a与b,最慢与次慢的两人所用时间分别为z与y。为了让两人过河的时间最短,可以采取两种策略:1. 让当前最快的人分两次把两人运过河,最快的人两次都回来,此时用时为 z + a + y + a = 2a + y + z;2. 让最快的与次快的一块过河,然后最快(或次快)的划回来,接着最慢和次慢的一块过河,达到后让先前到达的次快(或最快)的划回来,此时用时为 b + a + z + b = a + 2b 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值