背包问题九讲

01背包问题描述

已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是cost[i]。

限制:每种物品只有一件,可以选择放或者不放

问题:在不超过背包容量的情况下,最多能获得多少价值或收益

相似问题:在恰好装满背包的情况下,最多能获得多少价值或收益

这里,我们先讨论在不超过背包容量的情况下,最多能获得多少价值或收益。

基本思路

01背包的特点:每种物品只有一件,可以选择放或者不放

子问题定义状态

  1. f[i][v] : 前i件物品放到一个容量为v的背包中可以获得最大价值  

状态转移方程

  1. f[i][v] = max(f[i - 1][v],f[i - 1][v - weight[i]] + cost[i])  

分析

考虑我们的子问题,将前i件物品放到容量为v的背包中,若我们只考虑第i件物品时,它有两种选择,放或者不放。

1) 如果第i件物品不放入背包中,那么问题就转换为:将前i - 1件物品放到容量为v的背包中,带来的收益f[i - 1][v]

2) 如果第i件物品能放入背包中,那么问题就转换为:将前i - 1件物品放到容量为v - weight[i]的背包中,带来的收益f[i - 1][v - weight[i]] + cost[i]

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w144215160044/article/details/49908695
个人分类: DP
上一篇hdu 3183 A Magic Lamp (RMQ)
下一篇CodeForces 540B School Marks
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭