動的計画-モバイルインテリジェントロボット

トピック:
Cainiaoネットワークウェアハウスには、合計N個の小さな棚が並んでいます。棚の下部は空です。インテリジェントロボットは特定の棚の下にあります。XiaoMingは、非常に単純なインテリジェントロボット移動プログラムを作成しました。ロジックは次のとおりです。 :
1分ごとに、インテリジェントロボット1つの棚から隣接する棚にランダムに移動する必要があります。たとえば、最初はインテリジェントロボットが4番目の棚の下にあります。1分後、インテリジェントロボットは3番目の棚の下または5番目の棚の下になります。インテリジェントロボットが最初に最初の棚の下にある場合、1分後、インテリジェントロボットは間違いなく2番目の棚の下になります。
 
ここで、インテリジェントロボットの棚の数Nと開始位置Pを教えてください。シャオミンは、インテリジェントロボットがM分後にT番目の棚に到達したときの歩行スキームの数を知りたいと考えています。Xiaomingが数学をするのを手伝ってください。

入力:
棚の数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