編程題:過河問題

參考這個動態規劃-小朋友過橋問題

在這裏插入圖片描述

最少兩個人,最多三個人,所以有以下兩種策略:

1.每次都用前兩個人送一個人過去,假設先送最後一個,前兩個送它過去再回來需要data[1]和data[i-1]的時間,依次類推把剩下所有的都送過去;

2.每次在前三個人的幫助下送兩個人過去,0 1 2過去data[2],,0 1回來data[1],最後兩跟着0回去data[i-1],0和2再回來data[2],依次類推:

# -*- coding:utf-8 -*-
__author__ = 'ShawDa'
num_test = int(input())
for _ in range(num_test):
    n = int(input())
    data = list(map(int, input().split()))
    data.sort()
    dp = [0]*(n+1)   # dp[i]爲前i個人過河的最短時間
    dp[2:4] = data[1:3]
    for i in range(4, n+1):
        dp[i] = min(dp[i-1]+data[1]+data[i-1], dp[i-2]+data[1]+data[i-1]+2*data[2])
    print(dp[-1])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章