https://www.luogu.org/problemnew/show/2822
方法:预处理出2000*2000内所有n和m的答案。
错误原因:递推组合数忘了取模
1 #include<cstdio> 2 int c[2010][2010],sc[2010][2010],n,m,T,k; 3 int main() 4 { 5 int i,j; 6 scanf("%d%d",&T,&k); 7 for(i=0;i<=2000;i++) 8 c[i][0]=1; 9 for(i=1;i<=2000;i++) 10 for(j=0;j<=i;j++) 11 c[i][j]=(c[i-1][j]+c[i-1][j-1])%k; 12 sc[0][0]=(c[0][0]%k==0); 13 for(i=1;i<=2000;i++) 14 { 15 sc[i][0]=(c[i][0]%k==0)+sc[i-1][0]; 16 for(j=1;j<=2000;j++) 17 sc[i][j]=(c[i][j]%k==0&&i>=j)+sc[i][j-1]+sc[i-1][j]-sc[i-1][j-1]; 18 } 19 while(T--) 20 { 21 scanf("%d%d",&n,&m); 22 printf("%d ",sc[n][m]); 23 } 24 return 0; 25 }