洛谷 P2822 组合数问题

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 }
原文地址:https://www.cnblogs.com/hehe54321/p/7789054.html