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); }