任务是查找具有整数值的所有N×N
矩阵M
,当总和时
沿着山坳和行是固定的。
对于N=3
,这意味着:找到矩阵M
m11 m12 m13
m21 m22 m23
m31 m32 m33
这样
m11 + m12 + m13 = r1
m21 + m22 + m23 = r2
m31 + m32 + m33 = r3
和
m11 + m21 + m31 = c1
m12 + m22 + m32 = c2
m13 + m23 + m33 = c3
成立。
例如:
r1=3, r2=6, r3=9,
c1=5, c2=6, c3=7
一个解决方案是:
0 1 2
1 2 3
4 3 2
我提出的唯一算法是直接计算行的所有可能分区,从第一个分区开始(p11
,p12
,...
,p1N
)在第一列中,选中p21
,{{1},选择第二行的所有兼容分区(p22
,...
,p2N
,p11+p21 <= c1
) },...
,继续第三行。如果想要访问所有可能的解决方案,那么p1N+p2N <= cN
显然非常糟糕。
1D问题 - 将数字N
划分为A
部分 - 由许多算法解决。一个基本想法是计算将N
'+'串起来A
'|'的所有可能性并计算(N-1)
之间+
的数量(例如:|
收益率+++|++|+|
)。我想知道是否有可能将此ansatz扩展到2D问题。此外,我怀疑可能有可能根据前面的解决方案计算解决方案并迭代所有解决方案。