码迷,mamicode.com
首页 > 其他好文 > 详细

计算系数 计数与概率原理

时间:2018-03-23 00:58:45      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:names   line   复杂度   key   int   pos   turn   mes   空格   

题目描述

给定一个多项式(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 }
View Code

复杂度o(n2)

还有一种方法:

c[0]=1;

for(int i=1;i<=k;i++) c[i]=c[i-1]*(k-i+1)/i;
但是先乘后除 容易溢出。
所以需要取模运算
然而这里并不熟悉

计算系数 计数与概率原理

标签:names   line   复杂度   key   int   pos   turn   mes   空格   

原文地址:https://www.cnblogs.com/smallocean/p/8627678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!