• 背包问题:0/1背包问题 普通背包问题(贪心算法只适用于普通背包问题)


    //sj和vj分别为第j项物品的体积和价值,W是总体积限制。

    //V[i,j]表示从前i项{u1,u2,…,un}中取出来的装入体积为j的背包的物品的最大价值。

    第一种:0/1背包问题

    最大化 qquad sum_{j=1}^n p_j\,x_j,受限于 qquad sum_{j=1}^n w_j\,x_j  leqslant  W, quad quad x_j  in  {0,1}

    1)若i=0或j=0,  V[i,j] = 0

    2)若j<si, V[i,j] = V[i-1,j]

    3)若i>0且j>=si, V[i,j] = Max{V[i-1,j],V[i-1,j-si]+vi}

    第二种:背包问题:在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包。

    1)计算yi=vi/si,即该项价值和体积的比

    2)按比值的降序来排序

    3)从第一项开始装背包,然后是第二项,依次类推,尽可能的多放,直到装满背包。

    (贪心算法只适用于普通背包问题,物品可以任意分割,可以得到最优解。如果不能任意分割,贪心法得到的不一定是最优解,而是一个可行解。

    第三种:有界背包问题

    最大化 qquad sum_{j=1}^n p_j\,x_j,受限于 qquad sum_{j=1}^n w_j\,x_j  leqslant  W, quad quad x_j  in  {0,1,ldots,b_j}

    1)若i=0或j=0,  V[i,j] = 0

    2)若j<si, V[i,j] = V[i-1,j]

    3)若i>0且j>=k*si,k={1,2,...,bj}, V[i,j] = Max{V[i-1,j],V[i-1,j-si]+vi,V[i-1,j-2*si]+2*vi,...,V[i-1,j-k*si]+k*vi}

  • 相关阅读:
    iOS 7用户界面过渡指南
    断言
    UIView的任意圆角
    ios与js交互获取webview元素和赋值
    JSONModel解析Dictionary To Model /JSON To Model
    Mac测试模拟慢网速
    MySQL批量调整数据表里的日期
    博客园查询自己网站二级目录被百度收录的情况
    windows文件夹里批量更新文件后缀
    git 学习
  • 原文地址:https://www.cnblogs.com/mmcmmc/p/3876727.html
Copyright © 2020-2023  润新知