背包问题: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}

转载于:https://www.cnblogs.com/mmcmmc/p/3876727.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值