利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1)。也就是从n个数里面选择m个数、按递增方式放在每一层循环。
#include<iostream>
using namespace std;
int a[2001][2001];
int main()
{
int T,m,n,i,j;
a[1][1]=1; //组合公式Cn(m)=C(n-1,m)+C(n-1,m-1)
for(i=2;i<=2000;i++)
{
a[1][i]=i%1007;
a[i][i]=1;
}
for(i=2;i<=2000;i++) //打表
for(j=i+1;j<=2000;j++)
a[i][j]=(a[i-1][j-1]+a[i][j-1])%1007;
cin>>T;
while(T--)
{
cin>>m>>n;
cout<<a[m][n]<<endl;
}
return 0;
} 原文地址:http://blog.csdn.net/a809146548/article/details/44177877