把划分出来的东西看成两类,一类没有1,一类有1,比如dp[7][3],如果有1就相当于在dp[6][2]的每类后面追加一个1,如果没有1就把分出来的类里的每个数减一,这样如果有1就会减成0,此时就加上dp[7-4][3]的结果就是都没有1时的种数。
import java.util.Scanner;
public class _4 {
static int[][] dp=new int[205][205];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
for (int i = 0; i < dp.length; i++) {
dp[i]=new int[205];
dp[i][1]=1;
dp[i][i]=1;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
if(i-j>0){
dp[i][j]=dp[i-j][j]+dp[i-1][j-1];
}
}
}
System.out.println(dp[n][k]);
}
}