利用组合公式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