有多种形式的查询
Q(n,m)=(nC1 * mC1)+(nC2 * mC2)+(nC3 * mC3)...(nCk * mCk)其中 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)时间。
答案 0 :(得分: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;)