数学-洛谷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);
}