java m个苹果n个篮子_m个苹果放在n个盘子中有多少种结果

题目

m个苹果放在n个盘子中有多少种结果,前置条件:

允许存在空盘

重复的摆放结果忽略不计

ef21f3ab0d3d726ffb95890539cebec6.png

根据题意,也就是有3种情况,的确完全重复的摆放方式是没多大意义的

思路

这题可以用枚举的描述方式进行尾递归求解:

情况一:

存在一个空盘,甚至没有苹果或一个苹果,直接返回 1

情况二:

连盘子或苹果都没有,直接返 0

情况三:

可能有n个盘子只摆放了一个苹果,m-n的摆放占位,剩下的苹果任意摆放

情况四:

可能n个盘子为空,n-1,减去这空盘,剩下的m个苹果随意放置

btw,存在一个以上的空盘摆放方式与图上的重复摆放方式是等价的,尾递归甚至效率并不比循环低,说了这么多,研究此类问的方法还是dp(动态规划)

将上述情况三、四二者相加就是总的所有方法(结果)

实现

package com.test.dp;

import org.junit.test;

public class appleondisktest {

@test

public void main(){

system.out.println(dp(5,0));

}

/**

*

* @param m apple

* @param n disk

* @return

*/

private int dp(int m,int n){

if (m <= 0 || n <= 0)

return 0;

if (m == 0 || n == 1)

return 1;

else

return dp(m-n,n) + dp(m,n-1);

}

}

模拟递归的方式求解方式

243249.html

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值