47-ギフトの最大値-python

問題:m * nチェス盤の各正方形にギフトがあり、各ギフトには特定の値(0より大きい値)があります。ボードの左上隅から始めて、グリッド内のギフトを取得し、ボードの右下隅に到達するまで、一度に1マスずつ右または下に移動できます。チェス盤とその上の贈り物を考えて、あなたが得ることができる贈り物の最大値を計算してください?

def get_max_value(m_n):
    rows = len(m_n)
    cols = len(m_n[1])
    # 注意这种初始化列表的方式
    res = [[0 for i in range(cols)] for j in range(rows)]

    i=0
    while i<cols:
        j= 0
        while j<rows:
            if i == 0 and j ==0:
                arr = m_n[0][0]

            elif  i ==0 and j!=0:
                arr = res[0][j-1]+m_n[0][j]
            elif j ==0 and i != 0:
                arr = res[i-1][0] + m_n[i][0]
            else:
                arr = max([res[i-1][j],res[i][j-1]]) + m_n[i][j]

            res[i][j] = arr

            j += 1
        i += 1
    return res

  注:動的計画法の考え方を使用すると、状態方程式は次のようになります:f(i、j)= max(f(i-1、j)、f(i、j-1))+ values(i、j) 。それが最初の行にある場合、現在のグリッドまでの最大値は、前のグリッドの最大値+現在のグリッドの値です。最初の列にある場合、同じことが当てはまります。右下隅のグリッドの最大値は、この質問に必要な最大値です。

おすすめ

転載: blog.csdn.net/wh672843916/article/details/105503738