动态规划-移动智能机器人

题目:
菜鸟网络仓库有一排小货架,共有N个,货架的底部是空的,现在智能机器人在某个货架下,小明写了一个非常简单的智能机器人移动程序,逻辑如下:
每过1分钟,智能机器人必须随机的从一个货架下移动到相邻的一个货架下。比如刚开始智能机器人在第4个货架下,过1分钟后,智能机器人可能会在第3个货架下或者在第5个货架下。如果刚开始时智能机器人在第1个货架下,过1分钟以后,智能机器人一定会在第2个货架下。
 
现在告诉你货架的数目N,以及智能机器人开始所在的位置P,小明很想知道,在M分钟后,智能机器人到达第T货架,一共有多少种行走方案数。 请帮小明算一算。

输入:
货架的数量 N 智能机器人的起始位置 P 时间 M 目的地货架 T
输出:
一共有多少种行走方案数.
输入范例:
3
2
4
2
输出范例:
4

代码如下:
import java.util.Scanner;

public class Main1 {
	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int p = in.nextInt();
		int m = in.nextInt();
		int t = in.nextInt();
		in.close();
		int out = 0;
		if (n > 0 && p > 0 && p <= n && m >= 0 && t > 0 && t <= n) {
			int dp[][] = new int[m + 1][n + 2];// dp[0]都为0,0位置和n+1位置都为0,防止数组溢出
			dp[0][p] = 1;
			for (int i = 1; i <= m; i++) {// i分钟
				for (int j = 1; j <= n; j++) {// 到达j位置
					// i分钟到达j位置的走法数,等于i-1分钟到达j两端时走法数的和
					dp[i][j] = dp[i - 1][j + 1] + dp[i - 1][j - 1];
				}
			}
			out = dp[m][t];
		}

		System.out.println(out);

	}

}


猜你喜欢

转载自blog.csdn.net/m0_37541228/article/details/77356715