动态规划复习

118. 杨辉三角 - 力扣(LeetCode)

代码:

python 复制代码
class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        ans = []
        for i in range(numRows):
            hang = [1] * (i+1)
            for j in range(1, i):
                hang[j] = ans[i-1][j-1]+ans[i-1][j]
            ans.append(hang)
        return ans

198. 打家劫舍 - 力扣(LeetCode)

代码:有点怕看不出来是 dp 的题 。。。

python 复制代码
class Solution:
    def rob(self, nums: List[int]) -> int:
        n = len(nums)
        if n == 1:
            return nums[0]
        dp = (n+1) * [0]
        dp[0] = 0
        dp[1] = nums[0]
        dp[2] = max(nums[0], nums[1])
        for i in range(3, n+1):
            dp[i] = max(dp[i-1], dp[i-2]+nums[i-1])
        return dp[n]

解析:

容易忘的点

if n == 1 边界不能丢 :数组只有 1 个元素时,不能执行dp[2] = max(nums[0], nums[1]),访问nums[1]直接下标越界报错。

状态转移

不偷第 i 间房子 :最大收益就等于前i‑1间房子的最优结果dp[i‑1]。

偷第 i 间房子 :那上一间不能偷,取前i‑2间最优加上当前房子钱:dp[i‑2]+nums[i‑1]。 取两者较大值就是 dp[i]。

公式:dp[i] = max(dp[i‑1], dp[i‑2] + nums[i‑1])

小提示:dp 下标代表前几间房子 ,nums 是原始数组,所以要错开一位用nums[i‑1]。

279. 完全平方数 - 力扣(LeetCode)

代码:

python 复制代码
class Solution:
    def numSquares(self, n: int) -> int:
        dp = [float('inf')] * (n+1)
        dp[0] = 0
        for i in range(1, n+1):
            j = 1
            while j*j <= i:
                dp[i] = min(dp[i], dp[i-j*j]+1)
                j += 1
        return dp[n]

解析:

定义 :dp[i] 表示凑出整数 i 需要的最少完全平方数个数

初始化 :dp[0] = 0,其余位置初始为无穷大

计算顺序 :从小到大依次计算 dp[1] 到 dp[n]

状态转移 :对每个 i,遍历所有不超过 i 的平方数 j²,dp[i] = min(dp[i], dp[i-j²] + 1)

最终答案 :dp[n]

注意:因为凑完全平方数可无限选 '1'(最小完全平方数),因此,不存在无法凑出的情况。

相关推荐
徐小夕8 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
Robert--cao8 小时前
移动底盘与机械臂联合规划:开源算法与工程实现
算法
小豆庄9 小时前
Mac 上给视频人脸打码:本地工具的依赖、追踪与推理管线
算法·视觉检测·视频·敏捷流程·纹理贴图
星夜离尘569 小时前
MATLAB 工程实验:从相邻块均值手写重叠 Allan 偏差,数清有效项
算法·matlab·均值算法
y1su11 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
residual_fan12 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
其实防守也摸鱼12 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
蓝悦无人机12 小时前
《Planning algorithms》读书笔记——第8章 反馈运动规划
算法·读书笔记·反馈运动规划
RaaS10013 小时前
Agent Skills 进了 Linux Foundation:2.8 亿次安装,但装 skill 还没有安全规范
人工智能·算法·架构
CV爱数码13 小时前
CT 重建从零开始(五):ASTRA Toolbox 上手——几何、投影器与算法
图像处理·算法·计算机视觉·ct