组合数公式 : $C^k_n = \frac{n!}{k! (n - k)!}$
将数学公式转化为代码
ll f(ll n, ll m)
{
return g(n) / ( g(n - m) * g(m) );
}
其中求阶乘的代码为(有溢出风险,若数字太大需要高精度):
ll g(ll x)
{
ll res = 1;
for(int i = 2; i <= x; ++ i) res *= i;
return res;
}
题目AC代码
#include <iostream>
using namespace std;
typedef long long ll;
ll g(ll x)
{
ll res = 1;
for(int i = 2; i <= x; ++ i) res *= i;
return res;
}
ll f(ll n, ll m)
{
return g(n) / ( g(n - m) * g(m) );
}
int main()
{
int n, m; cin >> n >> m;
cout << f(13, 2) * 2 + f(13, 3) * 3
+ f(13, 2) + f(13, 3) * 6 + f(13, 4) * 4
+ f(13, 3) + f(13, 4) * 6 + f(13, 5) * 5
+ f(13, 6);
return 0;
}
暴力枚举
4 2
4 1 1
3 3
3 2 1
3 1 1 1
2 2 2
2 2 1 1
2 1 1 1 1
1 1 1 1 1 1