题目思路:
从右下到左上进行动态规划。逆向计算经过每一个格子至少需要的生命值。
def loving(n,m,s):
qishi=1
i=n-1
j=m-1
dp=[[0 for i in range(3)] for j in range(3)]
print(dp)
dp[i][j]=max(1,1-s[i][j])
j-=1
while j>=0:
dp[i][j]=max(1,dp[i][j+1]-s[i][j])
j-=1
j=m-1
i-=1
while i>=0:
dp[i][j]=max(1,dp[i+1][j]-s[i][j])
i-=1
i=n-2
j=m-2
print(dp)
for x in range(i,-1,-1):
for y in range(j,-1,-1):
dp_min=min(dp[x+1][y],dp[x][y+1])
dp[x][y]=max(1,dp_min-s[x][y])
return dp[0][0]
n=3
m=3
s=[[-2,-3,3],[-5,-10,1],[10,30,-5]]
s=loving(n,m,s)
print(s)