本人水平有限,题解不到为处,请多多谅解
本蒟蒻谢谢大家观看
题目:
数论简单题
(simple.cpp/in/out 1s 256M)

由于最终结果可能超过int的范围,因此请将运算结果对1000000007取模。
Input
第1行,一个整数T(T <= 200000),表示数据组数。
第2行至第T+1行,每行两个整数m, n。
0 < m <= n <= 2000
Output
共T行,每行输出一个整数,代表求和结果。
Sample Input
3
1 1
2 3
3 3
Sample Output
1
3
1
前一个数由后一个数累加而来
可以通过样例分析,是求组合数
组合意义:
循环变量构成一个递增的序列,因此只要在n个数中选出m个数,按从小到大的顺序依次分配给m个循环变量即可,组合数可用DP求杨辉三角得。
由于T很大,需要进行预处理。
时间复杂度O(nm)。
code:
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2020
4 #define ll long long
5 #define mod 1000000007
6 ll t,n,m;
7 ll c[N][N];
8 int main()
9 {
10 c[1][0]=c[1][1]=1;
11 for(ll i=2;i<=2011;i++)
12 {
13 c[i][0]=1;
14 for(ll j=1;j<=2011;j++)
15 c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;//杨辉三角求法
16 }
17 scanf("%lld",&t);
18 while(t--)
19 {
20 scanf("%lld%lld",&m,&n);
21 printf("%lld\n",c[n][m]);
22 }
23 return 0;
24 }