本文主要是介绍蓝桥杯每日一题:计算系数(组合计数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
给定一个多项式 (ax+by)k,请求出多项式展开后 x^n*y^m 项的系数。
输入格式
共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开。
输出格式
输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对 10007 取模后的结果。
数据范围
0≤n,m≤k≤1000,
n+m=k,
0≤a,b≤10^6
输入样例:
1 1 3 1 2
输出样例:
3
解题思路:
由题意可知所求系数与输入数的关系是Ckn*a^n*b^m;
组合计数Ckn可以有公式Ckn=Ck-1,n-1+Ck,n-1递推得到
a^n与b^m则需要快速幂求得。
参考代码:
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
const int N = 1010,MOD = 10007;
int c[N][N];
int a,b,k,n,m;int qmi(int a,int b)
{a%=MOD;int res = 1;while(b){if(b&1) res = res * a % MOD;b >>= 1;a = a*a%MOD;}return res;
}int main()
{cin>>a>>b>>k>>n>>m;for(int i=0;i<=k;i++)for(int j=0;j<=i;j++)if(!j) c[i][j]=1;else c[i][j] = (c[i-1][j] + c[i-1][j-1])%MOD;cout<<c[k][n] * qmi(a,n)%MOD * qmi(b,m) % MOD;return 0;
}
这篇关于蓝桥杯每日一题:计算系数(组合计数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!