题目:
分析:本来一看是图的dp,太简单,打算跳过,看一下题,和概率有关。
一般的dp就可以过了。
代码:
class Solution {
public:
double A[26][26][101];
int n;
int D1[8]={1,1,2,2,-1,-1,-2,-2};
int D2[8]={2,-2,1,-1,2,-2,-1,1};
double f(int x,int y,int K)
{
int k=K;
if(x<0||y<0||x>=n||y>=n) return 0;
if(A[x][y][k]!=-1.0) return A[x][y][k];
double ans=0;
if(K==0) return 1;
else
for(int i=0;i<8;i++)
{
ans+=(1.0/8*f(x+D1[i],y+D2[i],K-1));
}
A[x][y][k]=ans;
return ans;
}
double knightProbability(int N, int K, int r, int c) {
n=N;
for(int i=0;i<26;i++)
for(int j=0;j<26;j++)
for(int k=0;k<101;k++) A[i][j][k]=-1.0;
return f(r,c,K);
}
};
注意memset遇到double的时候,貌似不能直接使用。