leetcode:688. “马”在棋盘上的概率(dp,中等)

题目:

在这里插入图片描述

分析:本来一看是图的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的时候,貌似不能直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值