688. “马”在棋盘上的概率

已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始。即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1)。

现有一个 “马”(也译作 “骑士”)位于 (r, c) ,并打算进行 K 次移动。

如下图所示,国际象棋的 “马” 每一步先沿水平或垂直方向移动 2 个格子,然后向与之相垂直的方向再移动 1 个格子,共有 8 个可选的位置。

现在 “马” 每一步都从可选的位置(包括棋盘外部的)中独立随机地选择一个进行移动,直到移动了 K 次或跳到了棋盘外面。

求移动结束后,“马” 仍留在棋盘上的概率。

输入: 3, 2, 0, 0
输出: 0.0625

思路

①每次有8个方向可以走,走到K为0的时候例子剩下4种走法在棋盘上,所以P=4/8²=0.0625.只需记录走到最后在棋盘上的个数即可。超时代码。

class Solution {
public:int move[8][2] = { { 1, 2 }, { 1, -2 }, { 2, 1 }, { 2, -1 }, { -1, 2 }, { -1, -2 }, { -2, 1 }, { -2, -1 } };int count=0;double knightProbability(int N, int K, int r, int c) {dfs(N,K,r,c);return count*1.0/pow(8,K);}void dfs(int N, int K, int r, int c){if(!(r>=0 && r<N && c>=0 && c<N)) return ;//跳出棋盘的不算if(K==0){count++; return ;}//最后一步在棋盘上for(int i=0;i<8;i++){dfs(N, K-1, r+move[i][0], c+move[i][1]);} }
};

②用dp[r][c][k]记录在r,c位置,还剩K次的结果(棋盘内的概率)

class Solution {
public:int move[8][2] = { { 1, 2 }, { 1, -2 }, { 2, 1 }, { 2, -1 }, { -1, 2 }, { -1, -2 }, { -2, 1 }, { -2, -1 } };double dp[25][25][101];//dp[r][c][k],记录在rc位置上还有k步的概率。double knightProbability(int N, int K, int r, int c) {fill(dp[0][0],dp[0][0]+25*25*101,0);return dfs(N,K,r,c);;}double dfs(int N, int K, int r, int c){if(K==0) return 1;if(dp[r][c][K]!=0) return dp[r][c][K];double res=0;//记录8次中的概率总和for(int i=0;i<8;i++){int r1 = r+move[i][0];int c1 = c+move[i][1];if(r1 >= 0 && r1 < N && c1 >= 0 && c1 < N){//在棋盘内res += dfs(N,K-1,r1,c1);}}return dp[r][c][K]=res/8;}
};

LeetCode 688. “马”在棋盘上的概率相关推荐

  1. leetcode - 688. “马”在棋盘上的概率

    688. "马"在棋盘上的概率 -------------------------------------------- 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 ...

  2. LeetCode 688. “马”在棋盘上的概率(DP)

    文章目录 1. 题目 2. 解题 1. 题目 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1). 现有一个 ...

  3. leetcode 688. Knight Probability in Chessboard | 688. “马”在棋盘上的概率(dp,记忆化搜索)

    题目 https://leetcode.com/problems/knight-probability-in-chessboard/ 题解 左神讲过类似问题: 给定5个参数,N,M,row,col,k ...

  4. 【精】LintCode领扣算法问题答案:1084. “马”在棋盘上的概率

    1084. "马"在棋盘上的概率 描述 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1) ...

  5. LeetCode第688题 骑士在棋盘上的概率

    LeetCode第688题 骑士在棋盘上的概率 题目 在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始,并尝试进行 k 次移动.行和列是 从 0 开始 的,所以 ...

  6. Leetcode 688.Knight Probability in Chessboard

    Leetcode 688.Knight Probability in Chessboard 题目: On an NxN chessboard, a knight starts at the r-th ...

  7. 【LeetCode】1227. 飞机座位分配概率

    一.题目描述 有 n 位乘客即将登机,飞机正好有 n 个座位.第一位乘客的票丢了,他随便选了一个座位坐下. 剩下的乘客将会: 如果他们自己的座位还空着,就坐到自己的座位上, 当他们自己的座位被占用时, ...

  8. leetcode算法题--骑士在棋盘上的概率★

    原题链接:https://leetcode-cn.com/problems/knight-probability-in-chessboard/ 动态规划,这种题目的想法都是逆向思维,题目问从一个点出发 ...

  9. LeetCode 382. 链表随机节点(概率)

    1. 题目 给定一个单链表,随机选择链表的一个节点,并返回相应的节点值.保证每个节点被选的概率一样. 进阶: 如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现? 来源:力扣( ...

最新文章

  1. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
  2. Java IO: 管道
  3. python培训深圳-深圳Python培训哪里好
  4. 宝塔执行sh文件_宝塔面板未授权访问
  5. TCP/IP学习笔记(四)TCP超时重传及拥塞控制
  6. oracle确实表达式,ORACLE正规表达式
  7. RealFlow翻译教程——海洋波浪
  8. MySQL教程(十二)—— 数据的导入与导出
  9. os.path 大全
  10. java 申明数组 默认构造函数_没有默认构造函数,如何定义对象的数组
  11. 看后至少多活十年--只需十分钟
  12. 数据采集之登录那些事
  13. 浅谈单调队列优化dp
  14. 全用户态网络开发套件F-Stack架构分析
  15. IBM ServerGuide 8.42
  16. A Survey on Deep Learning Techniques for Stereo-based Depth Estimation论文阅读
  17. cesium 鼠标点击事件获取各种坐标
  18. mysql死锁解决方法_mysql出现死锁的原因及解决方案
  19. 2015-4-12分享的PDF
  20. Spring Security : 概念模型 SecurityContext 安全上下文

热门文章

  1. Mycat监控_监控平台Mycat-web配置指标_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0038
  2. 数据那点事001---集合
  3. SpringCloud工作笔记061---springBoot maven 打包jar报错_serverEndpointExporter
  4. DataBseDesign工作笔记005---将excel中的表导入到powerdesigner中
  5. android学习笔记---34_Activity的启动模式
  6. opencv编译问题
  7. grassfire算法
  8. 冒泡排序法_排序算法 冒泡排序法
  9. full join 和full outer join_带你了解数据库中JOIN的用法
  10. python统计表中单词及其出现的次数 字典形式输出_统计字符串中字母出现的次数,字典形式输出(python)...