题解 | #放苹果#
放苹果
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); } }