移動路線(dp入門)

移動路線
總時間限制: 1000ms 內存限制: 65536kB
描述
×桌子上有一個m行n列的方格矩陣,將每個方格用座標表示,行座標從下到上依次遞增,列座標從左至右依次遞增,左下角方格的座標爲(1,1),則右上角方格的座標爲(m,n)。
小明是個調皮的孩子,一天他捉來一隻螞蟻,不小心把螞蟻的右腳弄傷了,於是螞蟻只能向上或向右移動。小明把這隻螞蟻放在左下角的方格中,螞蟻從
左下角的方格中移動到右上角的方格中,每步移動一個方格。螞蟻始終在方格矩陣內移動,請計算出不同的移動路線的數目。
對於1行1列的方格矩陣,螞蟻原地移動,移動路線數爲1;對於1行2列(或2行1列)的方格矩陣,螞蟻只需一次向右(或向上)移動,移動路線數也爲1……對於一個2行3列的方格矩陣,如下圖所示:

|(2,1)|(2,2)|(2,3)|
-------------------
|(1,1)|(1,2)|(1,3)|
-------------------

螞蟻共有3種移動路線:
路線1:(1,1) → (1,2) → (1,3) → (2,3)
路線2:(1,1) → (1,2) → (2,2) → (2,3)
路線3:(1,1) → (2,1) → (2,2) → (2,3)
輸入
輸入只有一行,包括兩個整數m和n(0

2 3

樣例輸出

3

思路點拔:一個簡單的dp,大家想一想,這隻可憐的螞蟻只能想下或向右走,所以第一行的所有點是不是都只有一種走法,所以乾脆初始時就把所有的點都賦爲1,後面把它覆蓋掉就行了。
1 1 1
1 1 1
其他點都是左邊的走法加上上面的走法,學了小學奧數的應該都知道,這時,棋盤的狀態就是下面的樣子
1 1 1
1 2 3
這麼簡單的題我就不多說了,上代碼!!

#include<cstdio>
int main()
{
    int m,n,a[25][25];
    scanf("%d %d",&m,&n); //輸入棋盤大小
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=n;j++)
        {
            a[i][j]=1; //首先將棋盤清爲1
        }
    }
    for(int i=2;i<=m;i++) 
    //循環就不必枚舉第一行與第一列了,因爲都是一種方法
    {
        for(int j=2;j<=n;j++)
        {
            a[i][j]=a[i-1][j]+a[i][j-1]; 
           //每個點的走法都法、等於上面的點的走法加上左邊的點的走法
        } 
    }
    printf("%d\n",a[m][n]); //輸出終點的點的走法就是正解
    return 0;//可以放心大膽的結束了
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章