
背包问题
Bread Sir
记录算法之路
展开
-
背包问题——完全背包
问题描述 有N种物品和一个容量为W的背包,每种物品都有无限件可用。第i种物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。分析和01背包不同的是,物品是无限件,从选择物品的角度看,它不再像01背包那样,有两种选择:选or不选, 它可以选0件、1件、2件……等等,所以我们按照01背包的状态转移思想我们便可以有这样的状态转移方程: dp原创 2017-04-28 16:59:13 · 371 阅读 · 0 评论 -
背包问题——多重背包
问题描述有N种物品和一个容量为W的背包。第i种物品最多有n[i]件可用,每件重量是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。分析:两个最基本的算法:1.使用三重循环进行递推: 状态转移式为:dp[i][j]=max{dp[i-1][j-k*w[i]]+k*v[i]|0<=k<=n[i]} 关键代码如下:void solve(){原创 2017-04-28 21:39:51 · 347 阅读 · 0 评论 -
背包问题——01背包
终于开启了DP的新篇章了——背包问题。很鸡冻啊!! 参考《背包九讲》进行自我整理,真的很难理解呀QAQ!01背包问题描述:有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。分析:01背包中的“01”就是一种物品只有1件,你可以选择放进去背包即1,也可以选择不放入背包中即0。构造一个最优解的结构特征: 定义:dp[i][j]为前i原创 2017-04-26 23:59:45 · 278 阅读 · 0 评论