组合数
解题思路
这个不就是一个简简单单的杨辉三角吗,我们预处理出被 k k k 整除的数字,做一个二维前缀和就ok。
code
#include<iostream>
#include<cstdio>
using namespace std;
int t,k,star;
int n,m;
int f[2010][2010];
int s[2010][2010];
int main()
{
cin>>t>>k;
f[0][0]=f[1][0]=f[1][1]=1;
for(int i=2;i<=2000;i++)
{
f[i][0]=1;
for(int j=1;j<=i;j++)
{
f[i][j]=(f[i-1][j-1]+f[i-1][j])%k;
s[i][j]+=!f[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
}
s[i][i+1]=s[i][i];
}
while(t--)
{
cin>>n>>m;
if(m>n)
cout<<s[n][n]<<endl;
else
cout<<s[n][m]<<endl;
}
}