代码随想录训练营打卡Day33| 动态规划part02
62.不同路径
题目链接:62.不同路径
一个机器人位于一个
m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
思路:每一个状态是在上一个状态下进行推导的,所以用dp维护每个位置的路径;先对起点所在的行和列初始化为1【因为只能通过向下或向右达到】;
63. 不同路径 II
题目链接:63. 不同路径 II
给定一个
m x n的整数数组grid。一个机器人初始位于 左上角(即grid[0][0])。机器人尝试移动到 右下角(即grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。网格中的障碍物和空位置分别用
1和0来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。返回机器人能够到达右下角的不同路径数量。
思路:只有障碍的下方和右方会被影响,直接将dp表对应的地方置0;初始化起点的行列的时候也要考虑到障碍的存在;
343. 整数拆分
题目链接:343. 整数拆分
给定一个正整数
n,将其拆分为k个 正整数 的和(k >= 2),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。
思路:第一眼这样分割该怎么从上一个状态来进行推导呢?;通过对 7 - 9 的情况进行分析,拆分为 3 和 2 的情况乘积最大;【官方题解是直接枚举,这种找3和2的属于贪心大概?】
对每个
i(从小到大):
枚举最后一次切分位置
j,其中1 ≤ j < i。两种选择取最大:
只切一次:
j * (i - j)把右半段继续细分:
j * dp[i - j]
