題目:
把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用k表示)5,1,1和1,5,1 是同一種分法。
輸入每個用例包含二個整數m和n。0<=m<=10,1<=n<=10。0<=n<=10<=m<=10
解題思路:
我們首先定義dp[i][j]表示i個蘋果,j個盤子的分法總數
1.當盤子數多於蘋果數時:則必定有j-i個盤子是空著的。
dp[i,j] = dp[i,i];
2.當盤子數少於蘋果數時(j<=i):
又分兩種情況:
<1>當有空盤子時:即至少有乙個盤子是空的:dp[i][j] = dp[i][j-1];
<2>沒有空盤子時:即所有的盤子都有蘋果,從每個盤子裡拿掉乙個蘋果對結果沒有影響:dp[i][j] = dp[i-j][j];
因此所有可能的情況為dp[i][j] = dp[i][j-1]+dp[i-j][j];
初始化:
我們知道當i=0時,也就是蘋果為0,只有一種放法,當j=1時,也就是盤子為1,只有一種放法。
**如下:
#include
using
namespace std;
const
int n =
1010
;int n, m;
int dp[n]
[n];
intmain()
else
if(i >= j)
} cout << dp[n]
[m]<< endl;
return0;
}
現在試試下面這道題,嘿嘿嘿!!!
題目:在火影忍者的世界裡,令敵人捉摸不透是非常關鍵的。
我們的主角漩渦鳴人所擁有的乙個招數——多重影分身之術——就是乙個很好的例子。
影分身是由鳴人身體的查克拉能量製造的,使用的查克拉越多,製造出的影分身越強。
針對不同的作戰情況,鳴人可以選擇製造出各種強度的影分身,有的用來佯攻,有的用來發起致命一擊。
那麼問題來了,假設鳴人的查克拉能量為 m,他影分身的個數最多為 n,那麼製造影分身時有多少種不同的分配方法?
注意:影分身可以分配0點能量。
分配方案不考慮順序,例如:m=7,n=3,那麼 (2,2,3) 和 (2,3,2) 被視為同一種方案。
輸入格式
第一行是測試資料的數目 t。
以下每行均包含二個整數 m 和 n,以空格分開。
輸出格式
對輸入的每組資料 m 和 n,用一行輸出分配的方法數。
資料範圍
0≤t≤20,
1≤m,n≤10
輸入樣例:
17 3
輸出樣例:
8**如下:
#include
using
namespace std;
int cnt,n,m;
const
int n =
1010
;int dp[n]
[n];
intmain()
cout<[m]<}return0;
}
m個蘋果放入n個盤子問題
這個問題,看似是乙個簡單的排列組合問題,但是加上不同的限制條件,會演變成不同的問題,感覺很奇妙,就總結一下列舉下來 問題一 問題描述 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問有多少種不同的分法?注 5,1,1和1,1,5是同一種分法 解題分析 設f m,n 為m個蘋果,n個盤子...
m個蘋果放入n個盤子
放蘋果問題 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?注 5,1,1和1,1,5是同一種分法 解題分析 設f m,n 為m個蘋果,n個盤子的放法數目,則先對n作討論,當n m 必定有n m個盤子永遠空著,去掉它們對擺放蘋果方法數目不產生影響。即if n m ...
m個蘋果放入n個盤子問題,n個盤子不同的問題
網上已經有許多關於,m個蘋果放入n個盤子的問題 盤子相同 但是沒有具體關於n個盤子不同的問題,在這裡根據前面的n個盤子相同的基礎上,進行分析得出相應的遞推公式。針對前一問題這裡不再詳細介紹,具體的網頁鏈結為 問題描述 問題描述 把m個同樣的蘋果放在n個不同的盤子裡,允許有的盤子空著不放,問有多少種不...