一个简单的动态规划,配合二项式系数和杨辉三角。
C
N
K
=
C
N
−
1
K
−
1
+
C
N
−
1
K
C_N^K=C_{N-1}^{K-1}+C_{N-1}^K
CNK=CN−1K−1+CN−1K
#include<iostream>
#include<vector>
using namespace std;
int Cnk(int n, int k)
{
vector<vector<int>>c;
vector<int>c2;
c2.push_back(1);
c.push_back(c2);
c2.push_back(1);
c.push_back(c2);
for(int i=2;i<n+1;i++)
{
vector<int>c1;
c1.push_back(1);
for(int j=1;j<i;++j)
{
int x=c[i-1][j-1]+c[i-1][j];
c1.push_back(x);
}
c1.push_back(1);
c.push_back(c1);
}
return c[n][k];
}
int main(void)
{
int n,k;
cin>>n>>k;
cout<<Cnk(n,k)<<endl;;
return -1;
}