zoukankan      html  css  js  c++  java
  • 01背包 模板1 2 总结

    物品质量 w[0] w[1]  w[2] ....... w[n]                背包容量c               T

    物品价值 v[0]  v[1]  v[2]  .......  v[n]              物品种类 n                N

    (一)设DP(x,y)   表示  从前x项物品中  取出装入  体积为y的背包 的  物品的最大价值

              前x项物品(0---- x-1 , X)   去装          体积容量为y的背包  

         

                     |--------       0                                     当 x=0 或 y=0

     DP(x,y)     |                DP(x-1,y)                           不装 第x 种

                     |                 DP( x-1,y-w[x] )  +  v[x]        y-w[x]>=0  装 第x 种

    (二)设DP(x,y) 表示   从第x项物品开始  到 第n项物品  中取物品装入  体积为y 的背包  的    得到的最大价值

     从第x项物品        (x,   x+1  ,  X+2  ,  x+3  , ...........M ......n)    

                    |--------       0                                     当 x=M+1  或 y=0

     DP(x,y)     |                  DP(x+1,y)                           不装 第x 种

                     |                 DP( x+1,y-w[x] )  +  v[x]        y-w[x]>=0  装 第x 种

    动态规划算法思想1:

    设m[i][j]用来表示从前i项物品中区取出装入体积为j的背包的物品的最大价值。

    其中i的范围为0到n,其中j的范围为0到c,程序要寻求的解为m[n][c]。

    可以分以下三种情况:

    ①m[0][j]对所有的j的值为0(物品种类为0), m[i][0]对所有的i的值为0(体积为0)

    ②当前的体积j大于等于w[i]时, m[i][j]是下面两个量的最大值:m[i-1][j] (不装)和 m[i-1][j-w[i] ]+v[i] (装)

    ③当前的体积j小于w[i]时,m[i][j]等于m[i-1][j]

     

    动态规划算法思想2:

    设m[i][j]用来表示从第i项物品开始到第n项物品中取物品装入体积为j的背包的得到的最大价值。

    其中i的范围为0到n-1,其中j的范围为0到c,程序要寻求的解为m[0][c]。

    可以分为:

    ①m[n-1][j] 在当j>=0并且j< w[n-1] 时等于0(装不下),否则等于v[n-1] (可以装上)

    ②当前的体积j大于等于w[i]时, m[i][j]是下面两个量的最大值:m[i+1][j] 和 m[i+1][ j-w[i] ]+v[i]

    ③当前的体积j小于w[i]时,m[i][j]等于m[i+1][j]

  • 相关阅读:
    CSS的未来:游戏的变革Flexbox
    2013年第8周一JAVA对象序列化及TODO标签等
    大年初七回杭州
    2013年2月20日星期三
    2013年周六加班杂记
    大家初八但杭州收拾准备开始工作
    大家初六去香山
    2013年第8周四又是低效的一天
    2013年第8周二Delphi中Union结构
    2013年第8周日元宵节
  • 原文地址:https://www.cnblogs.com/2014acm/p/3908298.html
Copyright © 2011-2022 走看看