题解 | #放苹果#java,按堆分层递归,是我思路问题吗,感觉没那么简单
放苹果
http://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
String[] split = str.split(" ");
int m = Integer.parseInt(split[0]),n = Integer.parseInt(split[1]);
/*
m个苹果分为n份
分为1堆 + 分为2堆 + 分为3堆
*/
int res = 0;
for(int i = 1;i <= n;i++){
res += getCnt(m,i,1);
}
System.out.println(res);
}
//共有每个苹果,分为n堆,当前堆的起始大小(单纯为了去重)保证递增的顺序
public static int getCnt(int m,int n,int cur){
//只存储一堆,那直接返回
if(n == 1) return 1;
int cnt = 0;
//当前堆i,下一堆m - i,当前堆不能比下一堆小
for(int i = cur;i * 2 <= m;i++){
cnt += getCnt(m - i,n - 1,i);
}
return cnt;
}
}