P1313 计算系数

 

题目描述

给定一个多项式 (by+ax)^k(by+ax)k ,请求出多项式展开后 x^n \times y^mxn×ym 项的系数。

输入输出格式

输入格式:

 

共一行,包含 55 个整数,分别为 a ,b ,k ,n ,ma,b,k,n,m ,每两个整数之间用一个空格隔开。

 

输出格式:

 

共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对 1000710007 取模后的结果。

 

输入输出样例

输入样例#1: 
1 1 3 1 2
输出样例#1:
3

说明

【数据范围】

对于 30\%30% 的数据,有 0 ≤k ≤100k10 ;

对于 50\%50% 的数据,有 a = 1,b = 1a=1,b=1 ;

对于 100\%100% 的数据,有 0≤k ≤1,000,0≤n, m≤k0k1,000,0n,mk ,且 n+m=k ,0 ≤a,b ≤1,000,000n+m=k,0a,b1,000,000 。

noip2011提高组day2第1题

 题解:

其实x^n,y^m,就是这个a*x 被选中n次,快速幂写一下a^n,b^m; 还有就是要在*C(k,m)=C(k-1,m)+C(k-1,m-1) 递推式求解;我个人理解就是被选中的方法数。

#include <bits/stdc++.h>
const int MOD=10007;
using namespace std;
#define LL long long
LL pow_mod(LL a, LL b, LL p){//a的b次方求余p
    LL ret = 1;
    while(b){
        if(b & 1) ret = (ret * a) % p;
        a = (a * a) % p;
        b >>= 1;
    }
    return ret;
}
LL Fermat(LL a, LL p){//费马求a关于b的逆元
    return pow_mod(a, p-2, p);
}

LL kuai(LL x,LL k)
{
    LL ans=1;
    while(k)
    {
        if(x&1) ans=(ans*x)%MOD;
        k>>=1;
        x*=x;
        x%=MOD;
    }
    return ans;
}
int dp[1001][1000];
int main()
{
    int a,b,k,n,m;
    scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
    LL ans=1;
    ans=(ans*pow_mod(a,n,MOD))%MOD;
    ans=(ans*pow_mod(b,m,MOD))%MOD;
    for (int i = 0; i <=k ; ++i) {
        dp[i][0]=1;
    }
    dp[1][0]=1;dp[1][1]=1;
    for (int i = 2; i <=k ; ++i) {
        for (int j = 1; j <=i ; ++j) {
            dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%MOD;
        }
    }
    printf("%lld\n",ans*dp[k][m]%MOD);
    return 0;
}

  

 

posted @ 2018-08-15 21:21  岩扉  阅读(317)  评论(0编辑  收藏  举报