题解 | #放苹果#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;
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务