由于涉及最值,应该用dp做。(像dfs也像dp的题应该两个都可以做,但是由于用dfs遍历所有可能再求最值时间复杂度会很高等价于暴力解法,所以还是dp好)
又是一个牛客网上没有的题。
由于礼物价值正整数,所以相对好做:
使用dp[][]存储以(i,j)位置结束可以拿到的最大礼物价值。
首先初始化dp[0][j]和dp[i][0]。
dp[0][j]=dp[0][j-1]+a[0][j],dp[i][0]类似。
然后dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j]。
哦了
class Solution(object): def maxValue(self,values): m = len(values) n = len(values[0]) dp = [[0 for i in range(n)] for j in range(m)] dp[0][0]=values[0][0] for i in range(1,n): dp[0][i]=dp[0][i-1]+values[0][i] for i in range(1,m): dp[i][0]=dp[i-1][0]+values[i][0] for i in range(1,m): for j in range(1,n): dp[i][j]=max(dp[i-1][j],dp[i][j-1])+values[i][j] return dp[m-1][n-1] if __name__==\'__main__\': sol = Solution() values = [[1,10,3,8], [12,2,9,6], [5,7,4,11], [3,7,16,5]] print sol.maxValue(values)