把四堆石子合成一堆

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

四堆石子 [4, 1, 2, 3],每次只能合并相邻两堆,代价是这两堆之和。求把它们合成一堆的最小总代价。运行下面这段程序:

def merge_cost(a):
    n = len(a)
    INF = 10 ** 9
    pre = [0] * (n + 1)
    for i in range(n):
        pre[i + 1] = pre[i] + a[i]
    dp = [[0] * n for _ in range(n)]
    for L in range(2, n + 1):
        for i in range(n - L + 1):
            j = i + L - 1
            dp[i][j] = INF
            for k in range(i, j):
                t = dp[i][k] + dp[k + 1][j] + pre[j + 1] - pre[i]
                if t < dp[i][j]:
                    dp[i][j] = t
    return dp[0][n - 1]

print(merge_cost([4, 1, 2, 3]))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论