NOIP 2011 提高组 计算系数
有二项式定理 `\left( a+b\right) ^{n}=\sum _{r=0}^{n}\left( \begin{matrix} n\\ r\end{matrix} \right) a^{n-r}b^{r}`。
组合数C(a,b)=C(a-1,b)+C(a-1,b-1)。
`n^2`递推即可。
然后快速幂计算`a^m`和`b^n`的值。
于是`C(k,n)*a^m*b^n`就是答案。
代码:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> //by zrt //problem: using namespace std; typedef long long LL; const int inf(0x3f3f3f3f); const double eps(1e-9); LL a,b,k,n,m; LL c[1005][1005]; LL pow(LL a,LL b){ LL ret=1; while(b){ if(b&1) ret=ret*a%10007; a=a*a%10007; b>>=1; } return ret; } int main(){ #ifdef LOCAL freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif scanf("%lld%lld%lld%lld%lld",&a,&b,&k,&n,&m); c[0][0]=1; for(int i=1;i<=k;i++){ c[i][0]=1; for(int j=1;j<=i;j++){ c[i][j]=(c[i-1][j]+c[i-1][j-1])%10007; } } printf("%lld\n",pow(a%10007,n)*pow(b%10007,m)%10007*c[k][n]%10007); return 0; }