当前位置: 首页 > news >正文

数据结构与算法-动态规划-机器人达到指定位置方法数

机器人达到指定位置方法数

来自左程云老师书中的一道题

【题目】

假设有排成一行的 N 个位置,记为 1~NN 一定大于或等于 2。开始时机器人在其中的 M

位置上(M 一定是 1~N 中的一个),机器人可以往左走或者往右走,如果机器人来到 1 位置,

那么下一步只能往右来到 2 位置;如果机器人来到 N 位置,那么下一步只能往左来到 N-1 位置。

规定机器人必须走 K 步,最终能来到 P 位置(P 也一定是 1~N 中的一个)的方法有多少种。给

定四个参数 NMKP,返回方法数。

【举例】

N=5,M=2,K=3,P=3

上面的参数代表所有位置为 1 2 3 4 5。机器人最开始在 2 位置上,必须经过 3 步,最后到

达 3 位置。走的方法只有如下 3 种:

1)从 2 到 1,从 1 到 2,从 2 到 3

2)从 2 到 3,从 3 到 2,从 2 到 3

3)从 2 到 3,从 3 到 4,从 4 到 3

所以返回方法数 3。

N=3,M=1,K=3,P=3

上面的参数代表所有位置为 1 2 3。机器人最开始在 1 位置上,必须经过 3 步,最后到达 3

位置。怎么走也不可能,所以返回方法数 0。

递归代码:

public static int process(int N,int M,int K, int P) {if(K == 0) {return M == P? 1:0;}if(M ==1) {return process(N,M+1,K-1,P);}if(M == N) {return process(N,M-1,K-1,P);}return process(N,M+1,K-1,P) + process(N,M-1,K-1,P);}

递归推导动态规划

前提:判断是否是无后效性的。所谓无后效性是指是指一个递归状态的返回值与怎么到达这个状态的路径无关。

  1. 找到什么可变参数可以代表一个递归状态,也就是那些参数一旦确定,返回值也就确定了
  2. 把可变参数的所有组合映射成一张表,有1个可变参数就是一维表,有2个可变参数就是一张二维表….
  3. 最终答案要的是表中哪个位置,在表中标出。
  4. 根据递归的base case ,把这张表最简单、不需要依赖其他位置的那些位置填好
  5. 根据递归过程非base case的部分,也就是分析表中的普遍位置需要怎么计算得到,那么这张表的填写顺序也就确定了
  6. 填好表,返回最终答案在表中位置的值。

动态规划代码:

public static int process2(int N,int M,int K, int P) {int[][] dp = new int[K+1][N+1];dp[0][P] = 1;for(int i =1;i<=K;i++) {for(int j=1;j<=N;j++) {if(j==1) {dp[i][j] = dp[i-1][j+1];} else if(j == N) {dp[i][j] = dp[i-1][j-1];} else {dp[i][j] =  dp[i-1][j+1] + dp[i-1][j-1];}}}return dp[K][M];}
http://www.lryc.cn/news/259736.html

相关文章:

  • K8S学习指南(2)-docker的基本使用
  • java 执行linux 命令
  • ubuntu将本机的wifi网络通过网线分享给另一台机器(用于没有有线网络,重装系统后无wifi驱动或者另一台设备没有wifi网卡)
  • Docker + Jenkins + Gitee 自动化部署项目
  • ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)
  • 【TC3xx】GETH
  • 不需要联网的ocr项目
  • 【Git使用总结】
  • 仿照MyBatis手写一个持久层框架学习
  • 关东升老师极简系列丛书(由清华大学出版社出版)
  • 要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 27 章:如何避开和绕过所有人工智能内容检测器
  • JavaWeb笔记之MySQL数据库
  • Amazon CodeWhisperer 开箱初体验
  • Java的引用类型有几种?区别是什么?
  • 掌握iText:轻松处理PDF文档-基础篇
  • 小红书民宿文案怎么写?建议收藏
  • C#教程(一):面向对象
  • Linux系统中部署minio服务、开启反向代理、二级域名SSL加固
  • PMP备考总结:项目管理PMP考试提高通过率,轻松上岸~
  • shell脚本中获取当前脚本的绝对路径
  • SSD基础架构与NAND IO并发问题探讨
  • 激光雷达反射率定标板如何提取障碍信息
  • 【开源】基于JAVA的桃花峪滑雪场租赁系统
  • 将VOC2012格式的数据集转为YOLOV8格式
  • DevExpress WinForms Pivot Grid组件,一个类似Excel的数据透视表控件(二)
  • 为什么越来越多的人从事软件测试行业?
  • ERP数据仓库模型
  • 基于单片机的智能小车 (论文+源码)
  • Redis和MySQL双写一致性实用解析
  • win10彻底永久关闭自动更新的方法