Acwing--- 885. 求组合数 I (Java)_数学知识_DP分析求组合数

原题链接

①. 题目

在这里插入图片描述

②. 思路

时间复杂度分析

这种求组合数方法的时间复杂度为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]);
		}
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45480785/article/details/113896568