题目描述:
在一个m*n的棋盘的每一格都放一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上边的礼物,请计算你最多能拿多少价值的礼物。
#方法1:建立二维数组,动态规划法
def getMaxValue(values,rows,cols):
#values 是一维数组
if not values or rows<=0 or cols<=0:
return 0
maxvalues=[[0 for i in range(cols)] for j in range(rows)]
for i in range(rows):
for j in range(cols):
up=0
left=0
if i >0:
up=maxvalues[i-1][j]
if j>0:
left=maxvalues[i][j-1]
maxvalues[i][j]=max(left,up)+values[i*cols+j]
print(maxvalues)
return maxvalues[rows-1][cols-1]
values=[1,10,3,8,12,2,9,6,5,7,4,11,3,7,16,5]
getMaxValue(values,4,4)
#方法2:建立一维数组,动态规划法
def getMaxValue(values,rows,cols):
#values 是一维数组
if not values or rows<=0 or cols<=0:
return 0
maxvalues=[0]*cols
for i in range(rows):
for j in range(cols):
up=0
left=0
if i >0:
up=maxvalues[j]
if j>0:
left=maxvalues[j-1]
maxvalues[j]=max(left,up)+values[i*cols+j]
print(maxvalues)
return maxvalues[cols-1]
values=[1,10,3,8,12,2,9,6,5,7,4,11,3,7,16,5]
getMaxValue(values,4,4)
https://blog.csdn.net/dugudaibo/article/details/79678890 剑指offer(47):礼物的最大值(动态规划详解,python版)