题解 | #放苹果#

放苹果

https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

import java.util.Scanner;
/*
求解1: 参考 https://zhuanlan.zhihu.com/p/462642014
m个同样的苹果可以放入n个同样的盘子里面
if m <= n 则dp[m][n] = dp[m][m];
if m > n 分情况讨论是否空盘
1) 至少有一个空盘: dp[m][n-1]
2) 没有空盘: dp[m-n][n]
则: dp[m][n] = dp[m][n-1] + dp[m-n][n]

//也可以:
直接分两类使得: 
dp[m][n] = dp[m][n-1] + dp[m-n][n]
同时考虑 n-1 <= 0 和 m-n < 0 的情况
以上既可以用递归实现,也可以使用动态规划的方式实现

*/
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int m = in.nextInt();
            int n = in.nextInt();
            System.out.print(dp(m,n));
        }
    }

    private static int dp(int m, int n){
        if(n <= 0 || m < 0){
            return 0;
        }
        if(m == 0){
            return 1;
        }
        return dp(m, n-1) + dp(m-n,n);
    }
}

全部评论

相关推荐

德科信息 华为OD岗位 20K+ 统招本科
点赞 评论 收藏
分享
2024-12-23 12:44
门头沟学院 Java
黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能来写,如使用标签实现了兴趣推送,提升了用户黏性另外宣传下自己的开源仿b站微服务项目,GitHub已经390star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务