动态规划2——完全背包问题解析
Posted 水田如雅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划2——完全背包问题解析相关的知识,希望对你有一定的参考价值。
完全背包问题描述
- 有C种物品和一个容量为V的背包,每种物品都有无限件。第i件物品的体积是v[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
与之前的01背包不同的是,每个物品都有无限个,对于同一个物品,可以放置多个。
基本解法
首先还是先来用基本解法来一遍,不带优化的。先看多个物品的状态转移方程。
- 当不选择该物品时候,这个时候值跟01背包的一样,还是dp[i - 1][fv];
- 当选择该物品时候,对于一个固定容量,如果该物品能被放进去,要想价值最大,那就能放几个放几个,这时候的最大个数是
N = fv / w[i]
,即当前背包容量除以当前物品重量;得到最多放几个之后,就能计算出放入物品的总重量和最大价值了dp[i - 1][fv - N * w[i]] + N * v[i]
;
/**
* @param V 最大容量
* @param C 物品个数
* @param v 价值数组
* @param w 重量数组
* @return
*/
public int getMaxValue1
以上是关于动态规划2——完全背包问题解析的主要内容,如果未能解决你的问题,请参考以下文章