剑指offer LCR 166. 珠宝的最高价值 DP

139 阅读1分钟

LCR 166. 珠宝的最高价值 - 力扣(LeetCode)

因为只能向右或者向下到达(i,j)位置,(i,j)只能通过(i-1,j)和(i,j-1)位置到达。

dp[i][j]表示到达(i,j)位置的所有途径,所以dp[i][j]=dp[i-1][j]+dp[i][j-1]

又因为要求最大价值,gift[i,j]表示为(i,j)位置的价值

所以状态表示更新为:dp[i][j]表示到达(i,j)位置总共的最大价值和

状态转移方程为: dp(i,j)=max(dp[i-1][j],dp[i][j-1])+gift[i][j];

状态转移方程表示为:

到达(i,j)位置的总共最大价值=到达(i-1,j)位置的最大价值+到达(i,j-1)位置的最大价值 +(i,j)自身的价值

image.png image.png

code

image.png

空间优化

思路来源:K神原地修改DP数组

因为dp[i][j]只与dp[i-1][j],dp[i][j-1],gift[i][j]有关系,那么我们可以将原矩阵作为dp数组,在原来的矩阵上进行操作。

即:我们可以不给dp数组开辟空间。

原地修改

思路

image.png

image.png

code

image.png

暴力搜索+记忆化搜索

思路来源:stackoverflow