#include<iostream>
using namespace std;
int arr[2003][2003];
void set(){
int i,j;
arr[0][0]=1;
for(i=1;i<=2000;i++)
{
arr[i][0]=1;
for(j=1;j<=2000;j++)
{
arr[i][j]=(arr[i-1][j-1]+arr[i-1][j])%1007;
}
}
}
int main()
{
set();
int t,m,n;
while(cin>>t)
{
while(t-- && cin>>m>>n)
{
cout<<arr[n][m]<<endl;
}
}
return 0;
}
无话可说,重在公式推导C(m,n)
关于取余,针对每一项,由于是加法,取余可在打表时就解决,因为越到后面反而越大
可以说是DP,也可以说是数学公式
打表好处:
1. 节约程序时间,后者可直接调用表中数据