zoukankan      html  css  js  c++  java
  • 0-1背包问题1

    鼓捣好久 终于了然了一些

    0-1背包问题描述

      有一个窃贼在偷窃一家商店时发现有n件物品,第i件物品价值为vi元,重量为wi,假设vi和wi都为整数。他希望带走的东西越值钱越好,但他的背包中之多只能装下W磅的东西,W为一整数。他应该带走哪几样东西?

      【注】0-1背包问题中:每件物品或被带走,或被留下,(需要做出0-1选择)。小偷不能只带走某个物品的一部分或带走两次以上同一个物品。

    采用动态规划算法求解0-1背包问题,

    用子问题定义状态:即f[i][ J]表示前i件物品放入一个容量为j的背包可以获得最大价值。则其核心状态转移方程是:

    f[i][ j]=max{f[i-1][ j],f[i-1][ j-a[i]]+c[i]}

    即,“将前i件物品放入容量为j的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为j的背包中”,价值为f[i-1][j];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为j-a[i]的背包中”,此时能获得的最大价值就是f[i-1][ j-a[i]]再加上通过放入第i件物品获得的价值c[i]

    具体实现程序详见https://github.com/Wuyanan520/boruishangge/,源码为.ipython文件,为方便您审阅,转存了一份html文件。

  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/sxbjdl/p/5689382.html
Copyright © 2011-2022 走看看