【洛谷p1313】计算系数

(%%%hmr)

计算系数【传送门】

算法呀那个标签:

(越来越懒得写辽)(所以今天打算好好写一写)


首先(ax+by)k的计算需要用到二项式定理:

对于(x+y)k,有第r+1项的系数为:Tr+1=Cnran-rbr

这样对于(ax+by)k而言,第r+1项的系数就为:akbkCnran-rbr

然而这样算,到就爆掉了呢!

显然不能暴算,然鹅实际上,二项式定理中的系数T,我们可以看成神奇的杨辉三角形:

这样复杂度就降下来了呀,所以又半途而废了

直接带代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define mo 10007
using namespace std;
int a,b,k,n,m;
int f[1005][1005];
int pow(int a,int k){//快速幂 
    int ans=1;
    while(k){
        if(k&1)ans=ans*a%mo;
        a=a*a%mo;k>>=1;
    }return ans;
}
int main()
{
    scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
    a%=mo;b%=mo;f[0][0]=1;
    for(int i=1;i<=k;++i){f[i][0]=1;
        for(int j=1;j<=i;++j)
            f[i][j]=(f[i-1][j-1]+f[i-1][j])%mo;
    }
    printf("%d\n",f[k][n]*pow(a,n)%mo*pow(b,m)%mo);
}

beauty??

end-

猜你喜欢

转载自www.cnblogs.com/zhuier-xquan/p/10606430.html
今日推荐