O(1) 时间复杂度的以下 ncr 系列的总和

Sum of the following ncr series in O(1) time complexity

有多个

形式的查询

Q(n,m) = (nC1*mC1) + (nC2*mC2) + (nC3*mC3) ... (nCk*mCk) where k=min(n,m)

如何在 O(1) 时间复杂度中找到 Q(n,m) 的值。

我尝试预先计算 ncr[N][N] 矩阵和 dp[N][N][N] 其中 dp[n][m][min(n,m)] = Q(n,m).

这个预计算需要 O(N^3) 时间,现在可以在 O(1) 时间内回答查询。但我正在寻找一种预计算不应花费更多 O(N^2) 时间的方法。

从 C(n,0)*C(m,0) 开始的解决方案似乎很简单

Q0(n,m) = C(n+m, m)

所以对于你的公式,只需减去 1

Q(n,m) = C(n+m, m) - 1

示例:n=9,m=5

帕斯卡三角形的第 9 行和第 5 行的点积是

1   9     36    84    126   126  84  36  9  1
1   5     10    10    5     1
1 + 45 +  360 + 840 + 630 + 126                = 2002    = C(14,5)

可以从Q(n,1)开始用数学归纳法证明,但是表达式比较长

我发现了这个命题的一个真正了不起的证明,即这个边距太窄无法容纳 © Fermat ;)