动态规划----二维DP问题

问题:平面上有N*M个格子,每个格子中放着一定数量的苹果。你从左上角的格子开始, 每一步只能向下走或是向右走,每次走到一个格子上就把格子里的苹果收集起来, 这样下去,你最多能收集到多少个苹果。

简单的说,这个问题的步骤依然是找到状态与状态转移方程

状态:到(i,j)点时的苹果数

状态转移放厨房:s(i,j)=max{s(i-1,j),s(i,j-1)}+A(i,j),其中s(i,j)是(i,j)点时苹果发总数,A是当前点的苹果数

案例:

 代码实现:

n = int(input())
m = int(input())

a = []

for i in range(n):
    b = []
    for j in range(m):
        b.append(int(input()))
    a.append(b)

s = []

for i in range(n):
    b = []
    for j in range(m):
        b.append(0)
    s.append(b)

s[0][0] =  a[0][0]

for i in range(n):
    for j in range(m):
        if i>0 and j>0:
            s[i][j] = a[i][j] + max(s[i-1][j],s[i][j-1])
        elif i>0 and j<=0:
            s[i][j] = a[i][j] + s[i-1][j]
        elif i<=0 and j>0:
            s[i][j] = a[i][j] + s[i][j-1]

print(s)

猜你喜欢

转载自blog.csdn.net/aaalswaaa1/article/details/81407998
今日推荐