寻找在 Python 中合并石头的最低成本的程序

假设我们有 N 堆石头排成一排。这里第 i 堆有石头 [i] 块石头。一次移动包括将 K 个连续的堆合并为一个堆,现在这个移动的成本等于这 K 个堆中的石头总数。我们必须找到将所有石头堆合并为一堆的最小成本。如果没有这样的解决方案,则返回-1。

所以,如果输入像 nums = [3,2,4,1], K = 2,那么输出将是 20,因为,最初有 [3, 2, 4, 1]。然后将 [3, 2] 与成本 5 合并,我们有 [5, 4, 1]。之后将 [4, 1] 与成本 5 合并,我们有 [5, 5]。然后将 [5, 5] 与成本 10 合并,我们有 [10]。因此,总成本为 20,这是最低成本。

示例

让我们看下面的实现来更好地理解

import heapq

def solve(nums, K):

   n = len(nums)

   if (n-1)%(K-1) != 0:

      return -1

   dp = [[0]*n for _ in range(n)]

   sums = [0]*(n+1)

   for i in range(1,n+1):

      sums[i] = sums[i-1]+nums[i-1]

   for length in range(K,n+1):

      for i in range(n-length+1):

         j = i+length-1

         dp[i][j] = float('inf')

         for t in range(i,j,K-1):

            dp[i][j] = min(dp[i][j], dp[i][t]+dp[t+1][j])

         if (j-i)%(K-1)==0:

            dp[i][j] += sums[j+1]-sums[i]

   return dp[0][n-1]

nums = [3,2,4,1]

K = 2

print(solve(nums, K))

输入

[3,2,4,1], 2
输出结果
20

以上是 寻找在 Python 中合并石头的最低成本的程序 的全部内容, 来源链接: utcz.com/z/335472.html

回到顶部