網格走法
阿新 • • 發佈:2018-09-06
題目 highlight brush ios for 計算 pre 下標 space
有一個X*Y的網格,小團要在此網格上從左上角到右下角,只能走格點且只能向右或向下走。請設計一個算法,計算小團有多少種走法。給定兩個正整數int x,int y,請返回小團的走法數目。
/*動態規劃: 對於x*Y網格,dp[i][j]表示(i,j)位置一共有多少種走法, 由於只能向左和向右走,所以第一列和第一行所有位置的走法都是1,即dp[i][0]=1,dp[0][j]=1(0=<i<=x,0<=j<=y), 對於其他位置,走法應該等於其左邊格點的走法和其上面格點的走法之和,dp[i][j]=dp[i-1][j]+dp[i][j-1], 畫個圖比較容易理解。 */ /*例如題目中的輸入3 2 其實就是一個4*3的格子,至於為什麽是4*3是因為小團是從左上角走到右下角,即小團 並不在這個格子裏,這個是整個問題理解的關鍵。3*2網絡的各個點的走法數目如下: 10 6 3 1 4 3 2 1 1 1 1 1 3*2的走法就是格子中4*3的那個格子的走法數目 */ #include<iostream> using namespace std; int main() { int x, y; cin >> x >> y; int array[11][11]; for (int i = 0; i <=x; i++) { array[i][0] = 1; } for (int i = 0; i <=y; i++) { array[0][i] = 1; } for(int i=1;i<=x;i++) for (int j = 1; j <=y; j++) { array[i][j] = array[i - 1][j] + array[i][j - 1]; } cout << array[x][y] << endl;//這裏的數組下標是從0開始的,所以array[x][y],就是x和y都增加了1 return 0; }
網格走法