组合数 C<1000;
利用递推快速得到C[n][m]=C[n-1][m-1]+C[n-1][m];
int C[1001][1001];
void Init()
{ C[0][0]=1;
fin(1,1000)
{
C[i][0]=1;
}
fin(1,1000)
{
for(int j=1;j<=i;j++)
{
C[i][j]=(C[i-1][j]%md+C[i-1][j-1]%md)%md;
}
}
}
https://www.luogu.org/problemnew/show/P1313
附上一到练手题AC代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fin(a,n) for(int i=a;i<=n;i++)
const int md=10007;
const int maxn=1e3+10;
int C[1001][1001];
void Init()
{ C[0][0]=1;
fin(1,1000)
{
C[i][0]=1;
}
fin(1,1000)
{
for(int j=1;j<=i;j++)
{
C[i][j]=(C[i-1][j]%md+C[i-1][j-1]%md)%md;
}
}
}
ll ksm(ll a,ll b)
{
ll ans=1;
a=a%md;
while(b)
{
if(b%2==1)ans=(ans*a)%md;
b/=2;
a=(a*a)%md;
}
return ans;
}
int main()
{ ll a,b,k,n,m;
Init();
scanf("%lld %lld %lld %lld %lld",&a,&b,&k,&n,&m);
ll ans=(ksm(a,n)*ksm(b,m))%md;
ll tans=(ans%md*(C[k][n]%md))%md;
printf("%lld",tans);
}