数学-洛谷P1313 计算系数

https://www.luogu.org/problem/show?pid=1313
提高的第一题;
汗;
场面十分尴尬,我自己推不出来,只是知道a=b=1的时候就是杨辉三角;
然后发现其实在杨辉三角的基础上再乘上x,y的指数的a,b幂就好了就好了;
我数学真是烂啊;
令f[0][0]=1;
那么a=b=1时的答案就是f[k][m];
为什么?
………..
因为表示第k层是y的指数是m;
观察就知道了,把杨辉三角结合起来,y的指数递增,x的指数递减,加起来就是k;
好简单的样子诶;
唉~~;
我还是很弱啊;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define Ll long long
using namespace std;
Ll f[1010][1010],ans;
int a,b,k,n,m,mo=10007;
Ll ksm(Ll x,Ll y){
    Ll ans=1;
    while(y){
        if(y&1)ans=ans*x%mo;
        y>>=1;
        x=x*x%mo;
    }
    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++)
    for(int j=0;j<=i;j++)
        if(j==0)f[i][j]=1;else
        if(j==i)f[i][j]=1;else
        f[i][j]=(f[i-1][j]+f[i-1][j-1])%mo;
    ans=f[k][m];
    ans=ans*ksm(a,n)%mo*ksm(b,m)%mo;
    printf("%lld",ans);
} 
posted @ 2017-03-24 10:03  largecube233  阅读(98)  评论(0编辑  收藏  举报