题解 | #放苹果#放弃规划,暴力递归
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
//那什么动态规划思想我是一点没有,我真服了,什么东西,这应该算是暴力递归出来的 //但是3个参数真的有点蠢蠢的啊。。。 //总体思路就是先看第一个盘子,把剩下的苹果传给剩下盘子,然后递归,通过after控制下个盘子的数量不超过上个盘子, //来达到去重效果,最后如果没盘子了同时没剩下苹果来返回1停止递归。 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); System.out.println(getCount1(m, n, m)); } //m为苹果数量,n为盘子数量,after为上一盘子所放置的苹果数(目的为当前盘子不能比上个多,初始设置为m即可) public static int getCount1(int m, int n, int after) { //放置种数 int count = 0; //当盘子没有了递归结束 if (n == 0) { //如果盘子没有了但是还是剩苹果,则这种放法不算 if (m != 0) { return 0; } return 1; } //i为传给剩下盘子的苹果数量 for (int i = 0; i <= m; i++) { //如果当前盘子剩下的苹果比上个盘子多,则跳过 if (m - i > after) { continue; } count += getCount1(i, n - 1, m - i); } return count; } }