參考這個動態規劃-小朋友過橋問題。
最少兩個人,最多三個人,所以有以下兩種策略:
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])