动态规划-题目总结

概念理解

题型总结

丑数

264. 丑数 II
一个丑数是由2,3,5中的一个与前面已经得到的一个丑数相乘得来。
同类型的题目还有:313. 超级丑数,17.09. 第 k 个数

背包问题

01背包

有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

二维数组
数组dp[i][j] =new int[N][W+1]

  1. 确定dp数组以及下标的含义
    dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。

  2. 确定递推公式
    dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

  3. 初始化
    dp[i][0] = 0
    遍历第一个物品的时候,对于大于value[0]的空间最多取到value[0]。

  4. 遍历顺序:
    01背包二维dp数组在遍历顺序上,外层遍历物品 ,内层遍历背包容量和外层遍历背包容量 ,内层遍历物品都是可以的!

一维数组

  1. 确定dp数组的定义:
    在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j]。

  2. 确定递推公式
    dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

  3. 初始化
    dp[i][0] = 0

  4. 遍历顺序:
    一定是外层for循环遍历物品,内层for循环遍历背包容,并且只能是从右向左遍历,目的是防止覆盖上一轮的遍历结果。

  5. 核心代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值