Python程式:查詢執行乘法運算後的最大得分
假設我們有兩個陣列 nums 和 multipliers,大小分別為 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。
為了解決這個問題,我們將遵循以下步驟:
n := nums 的大小,m := multipliers 的大小
dp := 一個大小為 m x (m+1) 的二維陣列,並填充為 0
對於 i 反向遍歷範圍 0 到 m - 1,執行:
對於 j 遍歷範圍 i 到 m - 1,執行:
k := i + m - j - 1
dp[i, j] = (nums[i] * multipliers[k] + dp[i+1, j]) 和 (nums[j-m+n] * multipliers[k] + dp[i, j-1]) 的最大值
返回 dp[0] 的最後一個元素
示例
讓我們看看以下實現以獲得更好的理解:
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
廣告