我有以下输入内容
c1, c2
1, 41
2, 76
3, 109
4, 133
5, 149
6, 157
7, 174
8, 185
9, 200
10, 211
11, 223
12, 232
13, 245
14, 258
我需要做的是找到c2
的最低总和,其中c1
中对应值的总和等于24
。例如。 10
和14
的总和为469
。我想对于经验丰富的excel用户来说这很简单,但我绝对不是。值可以多次使用,因此3*8
和3*7+3
一样好。
答案 0 :(得分:3)
这似乎是一个很难回答的问题。我认为这实际上是您要解决的计算机科学的基本问题。您可以在Wiki上查看背包问题,以进行进一步的理论讨论,所以我认为您不会同时获得简单和完全正确的答案。 (https://en.wikipedia.org/wiki/Knapsack_problem)
无论如何,如果c1的值足够简单,可以说整数(没有分数或实数),则可以使用动态编程技术,这意味着可以解决许多与您的问题类似的子问题,但总和小于24,且小于24行,然后您所拥有的。将它们组合在一起可以帮助您解决更难的问题。
让我们定义SubProb(N,i)= c1中总和N的解决方案,仅使用1 ... i行。 如果是这样,则SubProb(N,i)= min(从第i行获取一个实例,而不从第i行获取任何实例)。这些是所有可用的选项。 在这种情况下,它是两个简单问题中的最小问题:
现在,我们以巧妙的顺序计算所有这些问题,直到SubProb(24,14),并获得我们想要的答案。最简单的方法是将它们放在带有N,i轴的表中,这样就很容易提取值,而没有很多递归开销。
我在excel文件中为您实现了此操作,这是链接。如果要在更大的i或N上执行此操作,只需使用扩展工具(单元格角上的黑色小十字)拖动表的最后一行和最后一列来扩展表。可以在此链接上找到: https://drive.google.com/open?id=1K0iROL9mb2NURM7Q0oUKzAFH4jNxNGtk
哦,答案是464。