愿各位程序员都能记住,输出第一条hello world时候的心情。坚持下去,你的每一条代码都在默默的改变世界,加油!加油!加油! “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。 什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。 人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。

数论简单题 【组合数】

 

本人水平有限,题解不到为处,请多多谅解

 

本蒟蒻谢谢大家观看

 

 

题目:

数论简单题

(simple.cpp/in/out 1s 256M)

 

 

 

由于最终结果可能超过int的范围,因此请将运算结果对1000000007取模。

Input

1行,一个整数TT <= 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 }

 

posted @ 2019-10-21 15:38  max_lemon  阅读(191)  评论(0编辑  收藏  举报
Live2D
别人恋爱不成功,你连暗恋都不成功! 你写不出代码的原因只有一个,那就是你没有彻底理解这个算法的思想!!-----沃茨·基硕德