1.动态规划特点
(1). 重叠子问题
(2).状态转移方程
(3).最优子结构
(4).题型:求最值
(5).核心:穷举
2.解题套路:
1.明确【状态】
2.明确【选择】
3.明确dp函数/数组的定义
4.明确base case(临界状态)
3.动态规划解法代码框架
4.背包问题
一.问题描述
二.解法思路
1.明确状态和选择
2.明确dp函数/数组的定义
为什么dp[0][ ]=dp[ ][0]=0,因为当容量或者没有物品的时候,此时是装不了物品,那么当前的价值就为0。
3.根据选择写出状态转移逻辑
(1) 当选择把物品装到背包时,此时物品的价值就是 =当前物品的价值+容量减去当前物品容量后剩余的背包容量所能装前面物品的选择,因此代码为dp[i][w]=dp[i-1][w-wt[i-1]]+val[i-1]
(2)当不选择装当前物品,就是直接在前面几个物品中选择,因此代码直接就是
dp[i]][w]=dp[i-1][w]
但是需要求最大值,因此需要比较两个方法,要用到max求出最优解
(3)还有一种情况只能不装当前物品,就是当前的背包容量装不下当前物品,就只能不装。
4.解法代码