java m个苹果n个篮子_m个苹果放在n个盘子中有多少种结果
題目
m個蘋果放在n個盤子中有多少種結果,前置條件:
允許存在空盤
重復的擺放結果忽略不計
根據題意,也就是有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);
}
}
模擬遞歸的方式求解方式
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的java m个苹果n个篮子_m个苹果放在n个盘子中有多少种结果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百望山巅,西子美人
- 下一篇: 第3章基本程序设计结构(java知识点笔