动态规划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——完全背包问题解析的主要内容,如果未能解决你的问题,请参考以下文章

动态规划_01背包_完全背包_多重背包_分组背包

动态规划第八篇:认识完全背包问题

动态规划第八篇:认识完全背包问题

代码随想录 动态规划 || 完全背包基础 518 377

动态规划-第二节:动态规划之背包类型问题

动态规划之——完全背包问题