①. 题目
②. 思路
时间复杂度分析
这种求组合数方法的时间复杂度为O(n^2),n最大为2000
- 这个公式推导就和选苹果一样
- 1.情况①:选出一个苹果
那么此时已经选出了一个苹果,剩下只要从a-1个苹果中选出b-1苹果 - 2.情况②:不选这个苹果
那么此时情况显然就是从剩下a-1位苹果中选出b个苹果
③. 学习点
组合数模板
④. 代码实现
import java.util.Scanner;
public class Main {
static int N=2010,INF=1000000007;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] C=new int[N][N];
for (int a = 0; a <=2000; a++) {
//预处理 枚举2000范围内的全部结果
C[a][0]=1;//初始化从a中挑0个为1
for (int b =1; b <=a; b++) {
//有点dp感觉
C[a][b]=(C[a-1][b]+C[a-1][b-1])%INF;
}
}
int n=sc.nextInt();
while(n-->0) {
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(C[a][b]);
}
}
}