坐船过河问题(贪心)

题目描述

有 N 个人要过河,船每次只能坐两个人,船载每个人过河所需时间 t[i] 不同,每次过河时间为船上较慢的那个人的时间,且船划过去后要有一个人把船划回来。求最快的过河时间。

贪心算法原理

  1. 基本思想
    • 贪心算法在每一步都选择当前看起来最优的选择,希望通过一系列局部最优解得到全局最优解。对于这个问题,贪心策略是尽量让用时最短的人多往返划船来节省时间,同时合理搭配人员过河。
  2. 贪心策略体现
    • 考虑每次过河的情况,尽量让速度快的人把速度慢的人送过去,然后速度快的人再回来,这样可以减少整体的过河时间。

贪心算法步骤

  1. 初始化与排序
    • 将每个人过河的时间 t[i] 进行排序,方便后续选择最快和最慢的人。
  2. 分情况计算
    • 当人数 N 为 1 时,直接返回该人的过河时间,因为只有一个人,直接过河即可。
    • 当人数 N 为 2 时,返回较慢那个人的过河时间,因为两人一起过河,时间取决于较慢的人。
    • 当人数 N 为 3 时,选择让最快的人分别送其他两人过河,总时间为 t[0] + t[1] + t[2](其中 t[0]是最快的人的时间),因为这样可以保证每次过河的时间都是相对较短的。
    • 当人数 N 大于 3 时:
      • 每次选择最快的两个人(设为 a 和 ba < b)和最慢的两个人(设为 y 和 zy < z)。
      • 第一种方案是让 a 和 b 过河,然后 a 回来,y 和 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值