刷题笔记之动态规划

动态规划可分为简单的动态规划和背包问题。

其中简单动态规划、例如斐波那契数列或者爬楼问题可以直接写,十分简单。

背包问题会复杂一点,分为01背包和完全背包。现在感觉这类问题的难度主要集中在两点,一是发现这个问题可以用动态规划求解、一般情况下问题会披一个外衣,如何把这个外衣扒下来是有一些难度的。二是找到关于背包代表的数据的定义。

01背包就是可以选择的元素只能选一次,完全背包则是可以选择无穷次。

现在感觉没有必要过分的把精力放在判断什么类型的背包上。主要是要找到迭代的公式和对背包数组的初始化。

对于背包问题,一般会令一个数组,横坐标是背包容量+1,纵坐标为待选数组长度。int[bagWeight][nums.length]。然后对数组进行初始化,一般初始化的内容为第一行和第一列,偶尔需要全部更新(23. 零钱兑换)。然后横向或纵向遍历,对数组元素进行更新。

可以发现每次更新的时候都在使用上一行的内容,且只使用上一行的内容。因此可以考虑将数组的维数减一,得到简化版的求解。简化版求解需要注意是从前往后还是从后往前遍历。01背包是从后往前,完全背包是从前往后。区别就在于普通版的方法中,不放当前nums时用到的数据是上一行(01,从后往前)还是当前行(完全,从前往后)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值