• 0-1背包问题


    背包问题是典型的动态规划的一个问题,为了简单的理解,那么让我来简单的解释一下吧:

      先来描述这个问题,假如你有一个包包能装下VOLUMN个单位重量的东西,那么现在有N种东西给你选,这N种东西都有N种价值,同时也有N种重量,那么如下来表示吧:

      VOLUMN:总重量

      weight[i]:第i种物品的重量

      value[i]:第i种物品的价值

      使用函数f[i][j]来表示装第i件物品,假设总重为j时的总价值,可以构建状态转移函数:

        f[i][j] = max(f[i-1][j],f[i-1][j-weight[i]]+value[i])

      其实当你列出动态表就好理解了:

      

      就相当于这一次i在这个j总重量的时候你的选择,你有两种,一种是不选择它,即f[i][j] = f[i-1][j],一种是选择它,失去weight[i]的重量空间而获得value[i]的价值,这是贪婪的做法。在表里面就相当于找到上一行的减去weight[i]个单元的价值加上value[i]这样不断的构建,当i达到N时,j达到VOLUMN时便得到了最佳解。

      伪代码如下:

        i from 1 -> N:

         j from 0->VOLUMN:

          if(weight[i] <= j)://当东东重量小于包包剩余重量时才能塞进去

            f[i][j] = max(f[i-1][j],f[i-1][j-weight[i]]+value[i])

          else:

            f[i][j] = f[i-1][j]

      结束

  • 相关阅读:
    映射JSP和查找JSP错误
    会话管理
    JSP九大隐式对象[续]
    Java调用DOS命令实现关机
    Filter过滤器入门1
    JSP标签
    获取当前日期和随机数
    ABSTRACT的方法是否可同时是STATIC,是否可同时是NATIVE,是否可同时是SYNCHRONIZED?
    闰年由来和闰年算法
    JSP九大隐式对象pageContext
  • 原文地址:https://www.cnblogs.com/luomingchuan/p/3677520.html
Copyright © 2020-2023  润新知