混合背包问题

[复制链接]
发表于 2024-1-2 17:38:13 | 显示全部楼层 |阅读模式

【问题描述】还是背包问题,不过有的物品只能取一次(0/1背包),有的可以取无限次(完全背包),有的只能取有限次(多重背包)。怎么解决?
由于我们按物品划分阶段,所以没有必要想太多。下面给出伪代码:
for (int i=1; i<N; i++)      // 不变  if (物品i属于0/1背包)
{
  // 按照0/1背包的做法取物品i
  for (int c=C;c>=0;c--)    if (c>=w) f[c] = max(f[c], f[c-w] + v);
}
else if (物品i属于完全背包)
{
  // 按照完全背包的做法取物品i
  for (int c=0;c<=C;c++)     if (c>=w) f[c] = max(f[c], f[c-w] + v);
}
else if (物品i属于多重背包)
{
  // 按照多重背包的做法取物品i
  ……
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表