TIOJ 1308 - 幾組解咧(其一)

Link: http://tioj.ck.tp.edu.tw/problems/1308

排列組合H(n,m)
本來在想說到底該怎麼算才不會Over Flow,50!太大了啊! 後來才知道原來用巴斯卡定理解就行了(我竟然沒想到)

直接依照巴斯卡定理DP遞迴下去,AC code短短的
其實也能用迴圈跑就行了

AC code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstring>
using namespace std;
long long dp[51][51];
long long C(int n,int m)
{
if(dp[n][m]!=-1)return dp[n][m];
if(n==m||m==0)return 1;
return dp[n][m]=C(n-1,m-1)+C(n-1,m);
}
int main()
{
memset(dp,-1,sizeof dp);
int n,m;
while(cin>>n>>m,n)
{
cout<<C(n+m-1,m)<<endl;
}
}