我正在尝试解决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;
}
};