?? 1942 無重全排列.cpp
字號:
#include"stdio.h"
__int64 c(__int64 n,__int64 k)
{ if(k == 0) return 1;
return c(n-1,k-1)*n/k;
}
int main()
{ __int64 m,n;__int64 ans;
while(scanf("%I64d%I64d",&m,&n)!=0 && m+n != 0)
{ ans = c(m+n,m>n?n:m);
printf("%I64d\n",ans);
}
return 1;
}
/*
簡單格路問題 |(0,0)→(m,n)|=( )
從 (0,0)點出發沿x軸或y軸的正方向每步
走一個單位,最終走到(m,n)點,有多少
條路徑?
無論怎樣走法,在x方向上總共走m步,在y方向上總共走n步。若用一個x表示x方向上的一步,一個字母y表示y方向上的一步。
則(0,0)→(m,n)的每一條路徑可表示為m 個x與n個y的一個有重排列。將每一個有重排列的x與y分別編號,可得m!n!個m+n元的無重全排列。
設所求方案數為p(m+n;m,n)
則P(m+n;m,n)·m!·n!=(m+n)!
故P(m+n;m,n)= (m+n)! /(m!n!)=C(m+n,n)=C(m+n,m)
設c≥a,d≥b,則由(a,b)到(c,d)的簡單格路數為|(a,b)(c,d)|=p(c-a+d-b,c-a);
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -