题目:
Description
给定一个多项式 (ax+by)k,计算多项式展开后 xnym 项的系数。
Input
第1行:一个整数T(1≤T≤10)为问题数。
接下来共T行。每行5个整数,分别为a,b,k,n,m,整数之间由一个空格分隔。
0≤k≤1,000,0≤n,m≤k,且n+m=k,0≤a,b≤1,000,000。
Output
对于每个问题,输出一行问题的编号(0开始编号,格式:case #0: 等)。
然后对应每个问题在一行中输出一个整数,表示所求的系数(这个系数可能很大,输出对10007取模后的值)。
Sample Input
3
2 5 290 130 160
235823 382573 999 111 888
1 1 3 1 2
Sample Output
case #0:
1580
case #1:
1952
case #2:
3
#include <stdio.h> #include <stdlib.h> const int mo=10007; int ans[1010][1010]; int a,b,k,n,m,i,j,d=0; int count; void main() { scanf("%d",&count); while(count--){ scanf("%d%d%d%d%d",&a,&b,&k,&n,&m); a=a%mo; b=b%mo; ans[0][0]=1; for(i=1;i<n+1;i++) { ans[i][0]=a*ans[i-1][0]%mo; } for(j=1;j<m+1;j++) { ans[0][j]=b*ans[0][j-1]%mo; } for(i=1;i<n+1;i++){ for(j=1;j<m+1;j++){ ans[i][j]=(a*ans[i-1][j]+b*ans[i][j-1])%mo; } } printf("case #%d:\n%d\n",d++,ans[n][m]); } }
刚开始想要用递归来做但是超时。
int cc(int k, int n) { int result=0; if(k==0 || k==n) { result = 1; return result; } else { result = (cc(k,n-1)+cc(k-1,n-1))%10007; return result; } }
时间: 2024-10-24 13:06:10