From db9a82260ad7929d0d6c88f38a74e70d9b5ca6d6 Mon Sep 17 00:00:00 2001 From: Wen <409053122@qq.com> Date: Thu, 1 Dec 2022 22:14:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E8=BF=90=E5=8A=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ds/dp/机器人运动问题.java | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/ds/dp/机器人运动问题.java diff --git a/src/ds/dp/机器人运动问题.java b/src/ds/dp/机器人运动问题.java new file mode 100644 index 0000000..d5e1323 --- /dev/null +++ b/src/ds/dp/机器人运动问题.java @@ -0,0 +1,47 @@ +package ds.dp; + +/** + * 机器人移动问题 + * n长度的数组上,机器人起始位置为s,目标位置为e,规定走k步,有多少种走法。 + * @author Wen + * @date 2022/12/1 21:30 + */ +class RobotMove { + + int dpf(int n, int s, int e, int k) { + int[][] dp = new int[n + 1][k + 1]; + dp[e][0] = 1; + for (int j = 1; j <=k; j ++) { + for (int i = 1; i <= n; i ++) { + if (i == 1) { + dp[i][j] = dp[2][j-1]; + continue; + } + if (i == n) { + dp[i][j] = dp[n-1][j-1]; + continue; + } + dp[i][j] = dp[i-1][j-1] + dp[i+1][j-1]; + } + } + return dp[s][k]; + } + + int f(int n, int s, int e, int k) { + if (k == 0) { + return s == e ? 1 : 0; + } + if (s == 1) { + return f(n, 2, e, k - 1); + } + if (s == n) { + return f(n, n - 1, e, k - 1); + } + return f(n, s - 1, e, k - 1) + f(n, s + 1, e, k - 1); + } + + public static void main(String[] args) { + RobotMove robotMove = new RobotMove(); + System.out.println(robotMove.dpf(4, 1, 3, 4)); + } +}