致力于改进部分代码。将这种方法更快的另一种方法是什么?递归:
public static int MOD = 11380;
public static int[][][][] memo = new int[11][11][11][31];
static int ret;
public static int solve(int L1, int L2, int L3, int D) {
if (D < 0) {
return 0;
}
if (L1 + L2 + L3 == 0) {
return 1;
}
ret = memo[L1][L2][L3][D];
if (ret == 0) {
// ret = 0;
for (int i = 0; i < L1; ++i) {
for (int j = 0; j <= L2; ++j) {
for (int k = 0; k <= L3; ++k) {
ret += solve(i, j, k, D - 1) *solve(L1 - 1 - i, L2 - j, L3 - k, D);
ret %= MOD;
}
}
}
for (int i = 0; i < L2; ++i) {
for (int j = 0; j <= L3; ++j) {
ret += solve(0, i, j, D - 1) * solve(L1, L2 - 1 - i, L3 - j, D);
ret %= MOD;
}
}
for (int i = 0; i < L3; ++i) {
ret += solve(0, 0, i, D - 1) * solve(L1, L2, L3 - 1 - i, D);
ret%= MOD;
}
}
return ret;
}
这部分代码在c ++中工作得非常快,但是现在需要转换成Java,但直接转换成Java代码导致花费更多时间......所以,现在寻找现有代码的改进。 UPD。 D - 深度,L1 - 量{},L2 - 量[]和L3 - 量()。 (0 <= L1,L2,L3 <= 10,0 <= D <= 30)这是来自争夺竞争的任务 here