模式锁与java,代码说明

时间:2016-01-15 07:32:06

标签: java design-patterns locking dynamic-programming

我在这个网站上发现了一个适用于java的代码:TopCoder/PatternLock/PatternLock.java。 我很难理解代码是如何工作的。

public class PatternLock {
public int solve(int n, int MOD) {
    int[][] dp = new int[n+1][n+1];
    dp[0][0] = 1;
    int[] count = new int[n+1];
    for (int i = 0; i < n; ++ i) {
        for (int j = 0; j < n; ++ j) {
            if (dp[i][j] == 0) continue;
            int dt = dp[i][j] << 1;
            if (dt >= MOD)
                dt -= MOD;
            dp[i][j+1] += dt;
            if (dp[i][j+1] >= MOD)
                dp[i][j+1] -= MOD;
            if (j+1 != n) {
                dp[i+1][j+1] += (long) dp[i][j] * (n-j) % MOD;
                if (dp[i+1][j+1] >= MOD)
                    dp[i+1][j+1] -= MOD;
            } else {
                count[i+1] += (long) dp[i][j] * (n-j) % MOD;
                if (count[i+1] >= MOD)
                    count[i+1] -= MOD;
            }
        }
    }
    int ret = 0;
    for (int i = 1; i <= n; ++ i) {
        ret += (long) count[i] * count[i] % MOD;
        if (ret >= MOD)
            ret -= MOD;
        if (i != 1) {
            ret += (long) count[i] * count[i-1] % MOD;
            if (ret >= MOD)
                ret -= MOD;
        }
    }
    ret <<= 1;
    if (ret >= MOD)
        ret -= MOD;
    return ret;
}

实际上有一个名为solve的方法作为参数:

-- Example 0
1
12345667
2

n = 1 , MOD = 12345667和结果与2进行比较。 如果有人可以帮助我,我不明白检查模式是否有效的程序!我明白这个问题可能看起来很基本,有人可以说学习java,但我在理解这段代码的逻辑时遇到了问题! 有什么帮助吗?

0 个答案:

没有答案