公式简要说明如下:
=REDUCE(
HSTACK("2-1-1", B2), 处理初始值k=2,dp[1]为矩阵左上角值
ROW(3:20), 循环k的范围[3,20]
LAMBDA(x, y,
IF(
y = 20,MAX(x) + K11, 如果k=20,返回最终结果=矩阵右下角值+x中最大值
REDUCE(
x, 保留上层循环的结果,继续堆积
SEQUENCE(IF(y < 12, y - 2, 20 - y), , IF(y < 12, 2, y - 9)), 根据k计算第2层循环值
LAMBDA(m, n,
REDUCE(
m, 保留上层循环的结果,继续堆积
SEQUENCE(n + (y > 11) * (11 - y), , IF(y < 12, 1, y - 10)), 根据k和x1计算第2层循环值
LAMBDA(p, q,
VSTACK(
p, 累计dp数组
HSTACK(
y & -n & -q, 连接k-x1-x2
INDEX(B2#, n, y - n) + 提取矩阵中[x1,k-x1]位置的值
(n > q) * INDEX(B2#, q, y - q) + 提取矩阵中[x2,k-x2]位置的值,但只有在x1>x2的时候才保留,否则变成0
MAX( 对来源的四种状态取dp的最大值
IFNA(
VLOOKUP( 在累计dp数组p中查找四种状态值
y - 1 & {0; 1; 0; 1} - n & {0; 0; 1; 1} - q,
p, 累计dp数组
2,
),
)
)
)
)
)
)
)
)
)
)
)
|