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文件。

  • 相关阅读:
    代码面试最常用的10大算法
    ant google compiler 压缩
    美工资源
    面试题
    validate表单验证插件
    laypage分页
    layer弹出框小结
    Thymeleaf
    webApp开发
    grunt自动化构建工具
  • 原文地址:https://www.cnblogs.com/sxbjdl/p/5689382.html
Copyright © 2011-2022 走看看