這是一道求總方案數的dp,唯一的不同就是2,5這種放法和5,2是一樣的,於是這道題就變成了把整數n分成非負整數m份,有多少種分法,寫轉移方程式的時候要仔細思考思考。
用s[i][j]表示用i個盤子放j個蘋果的不重複的總方案數。
處理邊界:s[
1][k
]=1(
0≤k≤
m),s[1][k]很顯然只有一種方法。s[
i][j
]=在算是s[i
][j]
時,分成兩個部分計算,一部分是s[
i−1]
[j] ,就是新加進來的這個盤子沒有起作用的方案數,那另一部分就是這個盤子裡放東西的方案數s[
i][j
−i] ,注意,第二部分轉移的前提是i≤
j ,就是說要把i−
1 個盤子都放東西,且要把這些多於乙個蘋果的盤子裡的蘋果放一部分給第
i 個盤子,使得最終這
i個盤子裡都放東西,那為什麼必須最終
i 個盤子不為空呢,因為只要i−
1個盤子中有空盤子,都可以歸併到第一部分討論,畢竟盤子的順序可以調換,即2,
2,4,
0 和2,
0,4,
2 是一種方案。
**如下:
/*
my convictions will not falter.--poppy
*/#include
#include
#include
using
namespace
std;
int i,j,k,s[15][15],n,m,t,ans=0;
int read()
int main()
printf("%d\n",s[n][m]);
}return
0;}
poj1664 放蘋果 解題報告
描述 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。輸入第一行是測試資料的數目t 0 t 20 以下每行均包含二個整數m和n,以空格分開。1 m,n 10。輸出 對輸入的每組資料m和n,用一行輸出相應的k。樣例輸入...
POJ1664放蘋果 解題報告
一道遞迴裸題。直接上 了 特別注意遞迴條件的判讀,一開始沒有考慮到盤子數為1的情況。只考慮蘋果為0了。include using namespace std int get res int m,int n if m n mreturn get res m,m else 如果水果多 get res m...
poj1664 放蘋果 acm解題報告 遞推
放蘋果time limit 1000ms memory limit 10000k total submissions 31892 accepted 20055 description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1...