答案 0 :(得分:1)
对我来说听起来像https://en.wikipedia.org/wiki/Constraint_satisfaction - 你把问题看作是一组算术方程式,通常是小整数未知数,并建立一个数据结构,当你对一个未知数有足够的了解时推导他人的等式。然后,您开始对可能的解决方案进行树搜索,使用数据结构从目前的假设中计算出足够的未知数,以使树搜索可行和/或排除不可能提前工作的部分解决方案。 / p>
前段时间我在同一个办公室工作,使用ILOG Solver进行调度,并注意到它的手册中有许多使用它来解决简单逻辑/数字问题的例子 - 我认为https://en.wikipedia.org/wiki/Verbal_arithmetic是一。 (他们最终放弃了调度,转而采用更简单的方法。陈述的原因是ILOG求解器调度不够透明,用户无法看到为什么不可满足的时间表不可满足,从而找出需要放宽的约束条件)。
答案 1 :(得分:1)
假设金字塔中的每个单元格都是紧随其下方的两个单元格的总和。
<强>定理强>
对于任何子金字塔P
,让数组r
为长度为P
的{{1}}中的任意一行。然后总和
n+1
对于C(n,0)*r[0] + C(n,1)*r[1] + ... + C(n,n)*r[n]
的每一行都是常量。 (P
是binomial coefficient。)
例如,让C(i,j)
成为整个金字塔。对于第一行,我们有:
P
对于底行,我们有:
C(0,0) * 223 = 223
其中C(4,0)*7 + C(4,1)*12 + C(4,2)*x + C(4,3)*18 + C(4,4)*6 = 133 + 6*x
是底行中的未知值。
应用上述定理:
x
遵循223 = 133 + 6*x
。
作为该定理一致性的证明,可以将x = 15
作为3行子金字塔,其峰值为P'
。然后
60
再次跟随C(0,0)*60 = C(2,0)*12 + C(2,1)*x + C(2,2)*18
。
一旦完全知道一行,它上面的所有行都会直接跟随。