動態規劃入門之走方格

一、問題描述

給定 一個 m x n 的棋盤,只能向右或者向下走,,求棋子從左上角走到右下角的情況一共有多少種?

二、解題思路

這是一個動態規劃求解的問題,原問題的解可以由子問題求解。

狀態轉移方程:f[m][n] = f[m-1][n]+f[m][n-1]

動態規劃不一定會用帶遞歸,而且遞歸容易棧溢出,雙重for循環直接從底層向上求解即可。

注意第一行和第一列的值都爲1,因爲一直往右走或者往下走只有一種情況。

三、代碼實現

public class Maze {

	public static void main(String[] args) {
		int result = new Maze().f(8, 8);
		System.out.println(result);
	}
	public int f(int m,int n) {
		int [][]f = new int[m][n];
		for(int i=0;i<m;i++) {
			for(int j=0;j<n;j++) {
				if(i==0 || j==0) {
					f[i][j] = 1;
				}else {
					f[i][j] = f[i-1][j] + f[i][j-1];
				}
			}
		}
		for (int[] js : f) {
			for (int s : js) {
				System.out.print(s+"\t");
			}System.out.println();
		}
		return f[m-1][n-1];
	}
}

四、運行結果

1	1	1	1	1	1	1	1	
1	2	3	4	5	6	7	8	
1	3	6	10	15	21	28	36	
1	4	10	20	35	56	84	120	
1	5	15	35	70	126	210	330	
1	6	21	56	126	252	462	792	
1	7	28	84	210	462	924	1716	
1	8	36	120	330	792	1716	3432	
3432

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章