题目描述
给定一个多项式,请求出多项式展开后
项的系数。
输入格式
输入共一行,包含 55 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开。
输出格式
输出共一行,包含一个整数,表示所求的系数。
这个系数可能很大,输出对 10007 取模后的结果。
输入输出样例
输入
1 1 3 1 2
输出
3
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll read(){
ll ans = 0 , f = 1;
char ch = getchar();
while(!isdigit(ch)){
f *= (ch == '-') ? -1 : 1;
ch = getchar();
}
while(isdigit(ch)){
ans = (ans << 3) + (ans << 1) + (ch ^ 48);
ch = getchar();
}
return ans * f;
}
#define in(a) (a) = read();
#define out(a) printf("%d" , (a));
#define space() printf(" ");
#define enter() printf("\n");
const int MAXN = 1e3 + 5;
const int MOD = 1e4 + 7;
int g[MAXN][MAXN];
void sanjiao();
int a , b , k , n , m;
signed main(){
in(a); in(b); in(k); in(n); in(m);
sanjiao();
out(g[n][m]);
}
void sanjiao(){
g[0][0] = 1;
for(int i = 0;i <= n ; i ++){
for(int j = 0;j <= m; j ++){
if(i == 0 && j == 0) continue;
g[i][j] = 0;
if(i > 0) g[i][j] = (g[i][j] + g[i - 1][j] * a) % MOD;
if(j > 0) g[i][j] = (g[i][j] + g[i][j - 1] * b) % MOD;
}
}
}
//1 1 3 1 2
也可以用杨辉三角的方法
#include<iostream>
using namespace std;
long long x[1010][1010];
int main()
{
long long a,b,k,n,m;
cin>>a>>b>>k>>n>>m;
x[1][1]=1;
for(int i=2;i<=k+1;i++) for(int j=1;j<=i;j++)
x[i][j]=(x[i-1][j-1]*b+x[i-1][j]*a)%10007;
cout<<x[k+1][m+1];
return 0;
}