如何解决 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 (将#修改为@)