这个求法其实是组合数的来源
伟大的古代劳动人民智慧的结晶
杨辉三角
大家可以观察这个杨辉三角
$$1$$
$$1\ 1$$
$$1\ 2\ 1$$
$$1\ 3\ 3\ 1$$
$$1\ 4\ 6\ 4\ 1$$
$$1\ 5\ 10\ 10\ 5\ 1$$
$$1\ 6\ 15\ 20\ 15\ 6\ 1$$
三角形的左右两条腰上的数组均为1,并且任意一位数等于其左上与右上的两个数字之和
我们就可以得到递推公式
$$ combinations[i][j] = combinations[i - 1][j - 1] + combinations[i - 1][j] $$
以下就是组合数的递推求法的模板
递推求法的码量相对较小,但是针对较大数据的求值并不友好,时空复杂度较大
/*
* @Author: Gehrychiang
* @Date: 2020-01-22 15:02:57
* @Website: www.yilantingfeng.site
* @E-mail: gehrychiang@aliyun.com
*/
#include <bits/stdc++.h>
using namespace std;
long long combinations[67][67];
const int MAXN = 65;
void cal()
{
for (int i = 0; i <= MAXN; i++)
{
combinations[i][0] = 1;
combinations[i][i] = 1;
for (int j = 1; j < i; j++)
{
combinations[i][j] = combinations[i - 1][j - 1] + combinations[i - 1][j];
//如需取模在此操作
}
}
}
int main()
{
cal();
int n, m;
while (cin >> n >> m)
{
cout << combinations[n][m] << endl;
}
return 0;
}

