python中贪心算法的最短过桥时间的解法

一. 最短过桥时间的解法



def cross(nums):
    n = len(nums)
    if n == 1:
        return nums
    if n == 2:
        return max(nums)
    if n == 3:
        return sum(nums)

    nums.sort()
    ans = 0
    while n > 3:
        ans += min(nums[n - 1] + nums[0] + nums[n - 2] + nums[0], \
                   nums[1] + nums[0] + nums[n - 1] + nums[1])
        n -= 2

    # 边界条件讨论
    if n == 3:
        ans += sum(nums)  # 只剩三人
    else:
        ans += nums[1]  # 只剩两人,不可能剩一人
    return ans

nums = []
while True:
    num = int(input('请输入每个人的过桥时间(输入0代表结束输入): '))
    if num != 0:
        nums.append(num)
    else:
        break

print("过桥的最短时间为: ", cross(nums))





请输入每个人的过桥时间: 1
请输入每个人的过桥时间: 3
请输入每个人的过桥时间: 4
请输入每个人的过桥时间: 2
请输入每个人的过桥时间: 6
请输入每个人的过桥时间: 0
过桥的最短时间为:  27

猜你喜欢

转载自blog.csdn.net/m0_74459049/article/details/133867710
今日推荐