禮物的最大值——Python實現

題目描述

在一個m×n的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於0)。

你可以從棋盤的左上角開始拿格子裏的禮物,並每次向右或者向下移動一格直到到達棋盤的右下角。

給定一個棋盤及其上面的禮物,請計算你最多能拿到多少價值的禮物?

思路

從左上角(0,0)走到右下角(m-1,n-1),每次只能向下或向右移動一格,選擇價值最大的一條路徑,很明顯這是一道動態規劃題。
遞推式:dp[i][j]= max (dp[i-1][j], dp[i][j-1])+ a[i][j]

參考代碼

def maxValue(array):
    m = len(array)
    n = len(array[0])
    dp =[[0] * n for i in range(m)]
    dp[0][0] = array[0][0]
    for i in range(1, m):
        dp[i][0] = dp[i - 1][0] + array[i][0]
    for i in range(1, n):
        dp[0][i] = dp[0][i - 1] + array[0][i]
    for i in range(1, m):
        for j in range(1, n):
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + array[i][j]
    return dp[m - 1][n - 1]

空間複雜度是O(m*n),還可優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章