【发布时间】:2020-07-18 11:57:08
【问题描述】:
我正在尝试使用动态编程实现一个函数来计算 Java 中的三项式系数。 我正在使用公式:
T(n,k)= 1 if n=0 and k=0
T(n,k)= 0 if k<-n or k>n
T(n,k)=T(n-1,k-1)+T(n-1,k)+T(n-1,k+1)
我使用二维数组来存储所有子问题的结果。但是,我得到的特定 n 和 k 的结果与正确答案相去甚远。这是我对该方法的实现:
public static long trinomial(int n, int k) {
if (n == 0 && k == 0) return 1;
if (k < -n || k > n) return 0;
long[][] T = new long[n+1][2*n+3];
T[0][(2*n+3)/2] = 1;
for (int i = 1; i <= n; i++) {
for (int j = -i; j <= i; j++) {
T[i][j+n+1] = T[i-1][j+n] + T[i-1][j+n+1] + T[i-1][j+n+2];
}
}
if (k < 0) return T[n][k+n];
else return T[n][k];
}
我收到T(24,12) = 123286440。但是,正确答案是:287134346。
我得到T(3,3) = 6。但正确答案是1。
当我使用相同的方法在纸上计算T(3,3) 时,我得到T(3,3) = 1 但在计算机中我得到了错误的答案。没有编译错误。
【问题讨论】:
标签: java arrays multidimensional-array dynamic-programming