在 Python 中通过执行乘法运算找到最高分数的程序

假设我们有两个数组 nums 和大小分别为 n 和 m (n >= m) 的乘数。数组是 1 索引的。现在我们的初始分数是 0。我们想要执行 m 次操作。在第 i 个操作(1 索引)中,我们将 -

  • 从 nums 的开头或结尾从 x 中选择一个值。

  • 将 multipliers[i] * x 添加到分数中。

  • 从数组 nums 中删除 x。

我们必须在执行 m 次操作后找到最大分数。

所以,如果输入像 nums = [5,10,15], multipliers = [5,3,2],那么输出将是 115,因为我们可以取 15 然后乘以 5 得到 5*15 = 75 ,那么 10*3 = 30,所以总数是 75+30 = 105,最后是 5*2 = 10,所以总数是 105+10 = 115。

示例

让我们看看以下实现以获得更好的理解 -

def solve(nums, multipliers):
   n, m = len(nums), len(multipliers)
   dp = [[0]*m for _ in range(m+1)]

   for i in reversed(range(m)):
      for j in range(i, m):
         k = i + m - j - 1
         dp[i][j] = max(nums[i] * multipliers[k] + dp[i+1][j], nums[j-m+n] * multipliers[k] + dp[i][j-1])

   return dp[0][-1]

nums = [5,10,15]
multipliers = [5,3,2]
print(solve(nums, multipliers))

输入

[5,10,15], [5,3,2]
输出结果
115

猜你喜欢