当前位置: 代码迷 >> 综合 >> ( 动态规划专题 )【 分组背包 】
  详细解决方案

( 动态规划专题 )【 分组背包 】

热度:58   发布时间:2024-03-08 13:52:17.0

( 动态规划专题 )【 分组背包 】

问题:n件物品,有重量w和价值p,将这些物品划分成k组,每一组里只能选择至多1件物品,背包容量为sum,求价值最大能拿多少

分组背包就是01背包的变式,只不过加了个限制,每个组最多只能拿一个,这就只需要把一个组抽象成一个物品作为第一个for循环,在第二层for循环固定住当前背包容量v时,再枚举这个组的物品看看那个最优更新dp[v]。

分组背包:

    for i=1 to k {for v=sum to 0 {for item in group i {if ( v>=item.w ) {dp[v] = max dp[v], dp[ v-item.w ] + item.p;}}}}

 

 

  相关解决方案