標籤:
2718:移動路線
總時間限制:
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<m+n<=20),代表方格矩陣的行數和列數,m、n之間用空格隔開
輸出
輸出只有一行,為不同的移動路線的數目。
範例輸入
2 3
範例輸出
3
#include<cstdio>#include<iostream>#define ref(i,x,y) for(register int i=x;i<=y;i++)using namespace std;int a[110][110];//表示到1,1->i,j 的方案數 int n,m;int main(){ //freopen("sh.in","r",stdin); scanf("%d%d",&n,&m); ref(i,1,max(n,m)) a[i][1]=1,a[1][i]=1; ref(i,2,n) ref(j,2,m) a[i][j]=a[i-1][j]+a[i][j-1]; printf("%d\n",a[n][m]); return 0;}
2718:移動路線(又是一個放蘋果)