微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决 n 维嵌套背包问题

如何解决如何解决 n 维嵌套背包问题

我不太了解那些 N/NP 问题,所以我可能会问 100 万美元问题的答案,希望不会。

现实生活中的例子:我想计算我可以做多少顿饭:

{
  chickenBurger: {
    amount: 1,ingredients: {
      tomato: {
        amount: 2
      },buns: {
        amount: 1
      },ketchup: {
        amount: 1
      },friedChicken: {
        amount: 2,ingredients: {
          chickenStrip: {
            amount: 1,},breadcrumbs: {
            amount: 1,}
      }
    }
  },friedChicken: {
    amount: 1,ingredients: {
      chickenStrip: {
        amount: 1,breadcrumbs: {
        amount: 1,}
  },ketchup: {
    amount: 1,chickenStrip: {
    amount: 1,}
}

现在的一个大问题是,同一种成分可以多次使用,但不仅如此,甚至可以在多个级别和多个子树中使用。

但真正使问题复杂化的是,我可以直接获得一件物品,或者我可以用可用的原料制作它。

如果某些成分是“兄弟”(在不同的树中),则很难以最佳方式分配它们。

我试图构建上面的例子来演示一些问题:

  • 用餐时直接需要炸鸡,还有鸡肉汉堡包
  • 炸鸡的配料,这顿饭也直接需要鸡条

如果我有

  • 鸡肉汉堡:1
  • 番茄:4
  • 馒头:1
  • 番茄酱:4
  • 炸鸡:3
  • 鸡条:4
  • 面包屑:2

我可以做一顿固定的,因为所有的材料都是直接可用的,所以我只剩下:

  • 鸡肉汉堡:0
  • 番茄:4
  • 馒头:1
  • 番茄酱:3
  • 炸鸡:2
  • 鸡条:3
  • 面包屑:2

现在是困难的部分。人类用这么大的数据计算很容易,但编写脚本却很复杂。

为了再做一顿饭,我又需要一个鸡肉汉堡、一个炸鸡、鸡条和番茄酱。如何不按照我目前正在做的方式分配成分(手动减去成分,直到我无法构建一个)?

如果我做一个鸡肉汉堡,我只剩下:

  • 鸡肉汉堡:1
  • 番茄:2
  • 馒头:0
  • 番茄酱:2
  • 炸鸡:0
  • 鸡条:3
  • 面包屑:2

然后因为我没有炸鸡了,我必须做一个。如果我这样做了,我就剩下:

  • 鸡肉汉堡:1
  • 番茄:2
  • 馒头:0
  • 番茄酱:1
  • 炸鸡:1
  • 鸡条:2
  • 面包屑:1

然后如果我用鸡肉条吃完这顿饭,我最后会剩下:

  • 鸡肉汉堡:1
  • 番茄:2
  • 馒头:0
  • 番茄酱:1
  • 炸鸡:1
  • 鸡条:1
  • 面包屑:1

因为如果我将这些成分转换成一顿饭,我会剩下 0 番茄酱,没有进一步检查我可以说我将无法做更多的饭菜,因为番茄酱是核心成分,不能制作。

我想在树上从上到下,反之亦然,收集整体所需的成分,仅计算核心成分,然后将可用的相加,但由于分布,它们都不是最佳的。

到目前为止,我最好的拍摄实际上就是我在上面所做的,一个一个,然后使用第一个直接可用的项目构建目标项目。但是如果可以制作很多目标物品,就会出现问题。

我觉得必须有一个很好的解决方案,我就是想不通。有人有什么想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。