题目描述
给定一个多项式(by+ax)k,请求出多项式展开后xn * ym 项的系数。
输入
共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开。0≤k≤1000, 0≤n,m≤k 且 n+m=k, 0≤a,b≤100,000
输出
输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。
样例输入
1 1 3 1 2
样例输出
3
求系数的递推式
1 #include <bits/stdc++.h> 2 long long int c[1001][1001]; 3 using namespace std; 4 const int maxn=10007; 5 int main(){ 6 ios::sync_with_stdio(false); 7 int a,b,k,n,m; 8 cin>>a>>b>>k>>n>>m; 9 //int d=min(n,m); 10 for(int i=0;i<=k;i++){ 11 c[i][0]=1; 12 for(int j=1;j<=i;j++) c[i][j]=(c[i-1][j-1]%maxn+c[i-1][j]%maxn)%maxn; 13 } 14 long long int p=1,q=1; 15 for(int i=1;i<=n;i++) p=p*a%maxn; 16 for(int i=1;i<=m;i++) q=b*q%maxn; 17 // cout<<c[n]<<endl; 18 if(a==0) p=1; 19 if(b==0) q=1; 20 long long int w=(p*q)%maxn; 21 cout<<(c[k][n]%maxn*w)%maxn<<endl; 22 return 0; 23 }
复杂度o(n2)
还有一种方法:
c[0]=1;
for
(
int
i=1;i<=k;i++) c[i]=c[i-1]*(k-i+1)/i;
但是先乘后除 容易溢出。
所以需要取模运算
然而这里并不熟悉