1

这里的问题:

你得到一份成分清单(假设它们的价值是单一的)及其各自的数量,以及一份产品清单。每个产品都有一个价格和包含所需成分及其数量的配方。

您需要的是最大化那些具有给定成分的产品的总收益。

我脑海中浮现的第一件事是创建价格/(n°需要的项目)比率并开始创建具有最高比率的产品。我知道这是某种贪心算法(如果我没记错的话),并不总是能找到最佳解决方案,但我没有其他可实施的想法。

另一种方法可能是暴力破解所有可能性,但我无法意识到如何实现它;我对暴力破解不是很熟悉。我的第一个蛮力算法是这个,但它很容易,因为它是数字,此外,后面的元素不会被前面的元素排除。

这里的情况有所不同,因为下一个元素是可用成分的函数,它们受到以前产品的影响,依此类推。

你有什么提示吗?这是某种家庭作业,所以我不喜欢直接的解决方案,而是要从头开始!


我必须使用的语言是C

提前谢谢了 :)

4

2 回答 2

5

我会首先尝试将其视为线性规划问题;有一些算法可以有效地解决它们。

如果你的问题不能接受小数项,那么它实际上是一个整数规划问题。也有可用的算法来解决这些问题,但通常很难(因为耗时)准确地解决大整数规划问题。

请注意,线性规划解决方案可能是整数规划解决方案的良好初步近似,例如,如果您的生产数量很大。

于 2013-05-10T16:28:33.293 回答
3

如果您有 CPU 周期来执行此操作(效率无关紧要),那么蛮力可能是最好的方法,因为它是最简单的,并且保证总是(最终)找到最佳答案。

可能要做的第一件事是弄清楚如何列举你的选择——即想出一种方法来列出你可以用给定的成分制作的所有不同的糕点组合。一开始不要担心价格。

作为一个(人为的)例子,用一杯牛奶和一打鸡蛋以及一些面粉和糖,我可以制作:

  • 12 个布朗尼
  • 11 块巧克力蛋糕和 1 块饼干
  • 10 块巧克力蛋糕和 2 块饼干
  • [...]
  • 1 块巧克力蛋糕和 11 块饼干
  • 12个饼干

然后,一旦你有了那个列表,你就可以遍历这个列表,计算你在每个选项上能赚多少钱,然后选择最赚钱的那个。

就生成选项列表而言,我将首先计算如果您只制作 cookie 可以制作多少个 cookie;那么如果你只做巧克力蛋糕,你能做多少巧克力蛋糕,等等。这将为您提供每个项目需要考虑的绝对上限。然后,您可以只考虑每个类型数小于或等于该界限的项目的每个组合,并丢弃任何结果需要比您手头更多的成分的组合。当然,这将非常低效且缓慢,但它会起作用。

于 2013-05-10T16:19:32.323 回答