无法理解为什么我需要另一个状态来解决此DP问题

时间:2019-09-05 17:35:22

标签: dynamic-programming

我正在尝试解决this,但是我的解决方案无效。 我看到的所有其他解决方案都是人们使用具有3种状态的dp表的地方,而我无法弄清楚是否仅用2种状态就无法完成。

这是我的代码:

class Solution {
public:
    int x[8] = {1, 2, 2, 1, -1, -2, -2, -1};
    int y[8] = {2, 1, -1, -2, -2, -1, 1, 2};

    bool check(int r, int c, int N){
        if(r<0 || r>=N || c<0 || c>=N)
            return false;
        return true;
    }

    double knightProbability(int N, int K, int r, int c) {
        vector<vector<double>> dp(N, vector<double>(N, -1));
        double ans = f(dp, N, K, r, c);
        return ans*pow(0.125, K);
    }

    double f(vector<vector<double>>& dp, int N, int K, int r, int c){
        if(K==0)
            return 1.0;

        double ans = 0.0;

        for(int i=0; i<8; i++){
            int nr = r + y[i];
            int nc = c + x[i];
            if(!check(nr, nc, N))
                continue;
            if(dp[nr][nc] > 0){
                ans += dp[nr][nc];
                continue;
            }
            dp[nr][nc] = f(dp, N, K-1, nr, nc);
            ans+=dp[nr][nc];
        }
        return ans;
    }
};

0 个答案:

没有答案