java m个苹果n个篮子_m个苹果放在n个盘子中有多少种结果
題目
m個(gè)蘋果放在n個(gè)盤子中有多少種結(jié)果,前置條件:
允許存在空盤
重復(fù)的擺放結(jié)果忽略不計(jì)
根據(jù)題意,也就是有3種情況,的確完全重復(fù)的擺放方式是沒多大意義的
思路
這題可以用枚舉的描述方式進(jìn)行尾遞歸求解:
情況一:
存在一個(gè)空盤,甚至沒有蘋果或一個(gè)蘋果,直接返回 1
情況二:
連盤子或蘋果都沒有,直接返 0
情況三:
可能有n個(gè)盤子只擺放了一個(gè)蘋果,m-n的擺放占位,剩下的蘋果任意擺放
情況四:
可能n個(gè)盤子為空,n-1,減去這空盤,剩下的m個(gè)蘋果隨意放置
btw,存在一個(gè)以上的空盤擺放方式與圖上的重復(fù)擺放方式是等價(jià)的,尾遞歸甚至效率并不比循環(huán)低,說了這么多,研究此類問的方法還是dp(動(dòng)態(tài)規(guī)劃)
將上述情況三、四二者相加就是總的所有方法(結(jié)果)
實(shí)現(xiàn)
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);
}
}
模擬遞歸的方式求解方式
希望與廣大網(wǎng)友互動(dòng)??
點(diǎn)此進(jìn)行留言吧!
總結(jié)
以上是生活随笔為你收集整理的java m个苹果n个篮子_m个苹果放在n个盘子中有多少种结果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百望山巅,西子美人
- 下一篇: 第3章基本程序设计结构(java知识点笔