视频解析:AcWing 211. 计算系数(每日一题)_哔哩哔哩_bilibili
解析
可以看作k个相乘:
那么一共有多少种取法呢?
首先一共k个,要取n个x,所以有Ck^{n}个取法,又因为有n位取x项,k-n位取y项,所以一共有:
转移
系数部分就是
至于排列数怎么求,有很多种求法,本题n最大1000,数据范围很小,可以用递推法来求排列数。 递推求排列数就是:
原理:假设要从a个苹果里选b个苹果。我们假设选第一个苹果,那么就要从剩下的a-1个苹果中选b-1个苹果。否则如果不选第1个苹果,那么就要从剩下的a-1个苹果里选b个苹果。
#include<bits/stdc++.h>
#define MOD 10007
using namespace std;
const int N=10010;
int C[N][N];
int main()
{
int a,b,k,n,m;cin>>a>>b>>k>>n>>m;
a%=MOD,b%=MOD;
for(int i=0;i<=k;i++)
{
for(int j=0;j<=i;j++)
{
if(!j)C[i][j]=1; //只有1种组合
else C[i][j]=(C[i-1][j-1]+C[i-1][j])%MOD; //递推
}
}
int res=C[k][n];
//然后还要乘n个a,m个b
for(int i=0;i<n;i++)res=res*a%MOD;
for(int i=0;i<m;i++)res=res*b%MOD;
cout<<res;
return 0;
}