UVA - 10105 Polynomial Coefficients 二项式定理和杨辉三角

来源:互联网 发布:北师大网络教育作业 编辑:程序博客网 时间:2024/05/21 06:30

题目大意:给出一个(x1 + x2 + x3 + ... + xK)^n式子,要你求出这个式子进行展开后其中一项(x1)^n1(x2)^n2 ... (xk)^nk的系数是多少

解题思路:如果换成(a+b)^n的这种类型的,求其中一项的系数是多少就很简单了,可以用二项式定理解决,而杨辉三角的每行记录的刚好是展开后的每个系数。

但因为里面有很多个,所以不能用二项式定理,那就想办法用二项式定理。

将前面的k-1个的和看成T,则式子就变成了(T+xk)^n,这样的话就可以得到T^m * (xk)^nk这项的系数了。

而这时m的话是可以求出来的,m = n - nk(由二项式公式得)。

然后继续展开(T)^n-nk次方,这时将T变成前k-2的和P加上n(k-1),就变成了(P+n(k-1))^(n-kn),然后仿照上面的,即可得到最后的系数了

#include<cstdio>#define maxn 20int c[maxn][maxn], t[maxn];void init() {c[0][0] = c[1][0] = c[1][1] = 1;for(int i = 2; i <= 13; i++) {c[i][0] = c[i][i] = 1;for(int j = 1; j < i; j++)c[i][j] = c[i-1][j-1] + c[i-1][j];}}int main() {int n, k;init();while(scanf("%d%d",&n, &k) == 2) {for(int i = 1; i <= k; i++)scanf("%d",&t[i]);int cur = k;long long ans = 1;while(cur >= 1) {ans *= c[n][t[cur]];n -= t[cur];cur--;}printf("%lld\n",ans);}return 0;}


0 0