背包问题
01背包问题:
01背包:
有n件物品和一个容量为v的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。
基本思路:
由于每件物品只有一件,所以我们只要考虑这件物品是放还是不放,如果放的话背包容量为v-c[i],其价值也会增加放入物品的价值,若如果选择不放的话,则i-1其价值不变。
状态转移方程:
f[i][v]=max(f[i-1][v],f[i-1][v-c[i]]+w[i])
01背包问题的优化:
01背包可以由二维数组降为一维数组,状态转移方程由f[i][v]=max(f[i-1][v],f[i-1][v-c[i]+w[i]) 转为f[v]=max(f[v],f[v-c[i]]+w[i])f[v]的状态值只与第i-1件能否放入背包有关,所以要从大容量从后往前排列。
01背包和贪心的区别;
贪心的物品是可以分割,而01背包是对一件物品进行考虑
完全背包:
完全背包是01背包中一件变为无限件。对于完全背包降维的循环次序与01背包不同。
区间dp
区间DP主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优值。区间dp就是先确定区间的左端点或右端点然后枚举区间长度进行遍历的到最优解。
学习心得
这周学习了区间dp和背包问题,通过做题我觉得区间dp的题要比线性dp的题难一些,虽然都是求状态转移方程,一个是根据某一个值来求一个是根据某个区间来求,但就是对于一些题很难找到思路,其实也还是自己做题少见的题太少了,我觉得还是多做题才能找到区间dp的套路,对于背包问题的学习,可能是还没深入的原因,背包问题现在我觉得学起来还是比较轻松的,题目也都是很容易理解的类型。
acm第八周学习总结
最新推荐文章于 2024-04-29 17:03:19 发布