//计算组合数
long long C(long long n, long long m)
{
if (m == 0 || m == n)return 1;
return C(n - 1, m) + C(n-1, m-1);
}
long long res[67][67] = { 0 };
//递归
long long C1(long long n, long long m)
{
if (m == 0 || m == n)return 1;
if (res[n][m] != 0)return res[n][m];
else
return res[n][m] = C1(n-1,m)+C1(n-1,m-1);
}
//递推
const int n = 60;
void calC()
{
for (int i = 0; i < n; i++)
{
res[i][0] = 1;
res[i][i] = 1;
}
for (int i = 2; i <= n; i++)
{
for (int j = 0; j <=i / 2; j++)
{
res[i][j] = res[i - 1][j] + res[i - 1][j - 1];
res[i][i-j] = res[i][j];
}
}
}
//通过定义式的变形来计算
long long C(long long n, long long m)
{
long long ans = 1;
for (long long i = 1; i <= m; i++)
{
ans = ans * (n - m + i) / i;
}
return ans;
}