zoukankan      html  css  js  c++  java
  • 0_1 Package

    0-1背包问题

    0-1背包问题

    问题:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。

    求解:将那些物品装入背包使这些物品的费用总和不超过背包容量,且价值总和最大。

    提示:每种物品只有一件,可以选择放或者不放。

     

    算法基本思想:

    利用动态规划思想:

    子问题:f[i][v] 表示前i件物品恰巧放入一个容量为v的背包可以获得的最大价值。

    状态转移方程:f[i][v] = max {f[i-1][v], f[i-1][v-c[i]]+w[i]}。

     

    解释状态转移方程:

    将前i件物品放入容量为v的背包中这个子问题,

    如果只考虑第i件物品放或者不放,那么就可以转化为只涉及前i-1件物品的问题。

    ① 如果不放第一件物品,则问题转化为“前i-1件物品放入容器为v的背包中”。

    ② 如果放第i件物品,则问题转化为“前i-1件物品放入剩下的容量v-c[i]的背包中”——此时获得的最大价值就是f[i-1][v-c[i]]再加上通过放入第i件物品获得的价值w[i]。

    f[i][v]的值就是 ①  ②中最大的那个值。

     

     

  • 相关阅读:
    假期(面试题二)
    假期(面向对象相关)
    假期(模块相关)
    假期(面试题一)
    假期(函数相关)
    最后一个假期
    Django缓存问题
    python pass关键字神奇吗
    python中类变量,成员变量
    python类中self是什么
  • 原文地址:https://www.cnblogs.com/M-D-LUFFI/p/4250324.html
Copyright © 2011-2022 走看看