把 M 个同样的苹果放在 N 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
注意:5、1、1 和 1、5、1 是同一种分法,即顺序无关。
import java.util.Scanner;
public class Main {
public static void main(String[]args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
int m = scan.nextInt();
int n = scan.nextInt();
int [][] dp = new int[m+1][n+1];
for(int j=1;j<=n;j++) {
dp[0][j] = 1;
dp[1][j] = 1;
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(j<=i){//苹果比盘子多
dp[i][j] = dp[i][j-1] + dp[i-j][j];
}else{//苹果比盘子少
dp[i][j] = dp[i][i];
}
}
}
System.out.println(dp[m][n]);
}
}
}
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int m = sc.nextInt(); int n = sc.nextInt(); System.out.println(fun(m, n)); } } public static int fun(int m, int n) { if(m == 0 || n == 1) return 1; if(n > m) return fun(m, m); else return fun(m, n - 1) + fun(m - n, n); } }