該題說明了狀態開設的意義一樣,但是從哪個方向去理解推倒狀態的轉移對解題非常關鍵.該題扣住是否所有的盤子中有空盤子,就得到了乙個非常簡單且優美的方程.如果從當前盤子的放置狀態或者是當前蘋果的放置狀態來求解狀態轉移方程就不能寫出來.這和題意中的相同盤子,相同蘋果有很大的關係.
**如下:
#include #include#include
#include
#include
using
namespace
std;
int n, m, dp[15][15
];/*
m個相同的蘋果放到n個相同的盤子裡,經典組合數學問題
每個狀態有哪些屬性呢? 一般的狀態就是dp[i][j]表示把題目中的m,n替換成i,j,
那麼我們可以得到動態轉移方程:
dp[i][j] = dp[i][j-1] + dp[i-j][j]
上面這個方程的意思就是說,如果j個盤子中有空盤子的話,那麼就轉化為dp[i][j-1],否則
如果放東西的話,那麼我們就先給這j個盤子各放乙個蘋果,然後問題就轉化為dp[i-j][j]
邊界條件要注意, dp[1][k] = 1 dp[k][1] = 1, dp[0][k] = 1;
*/void
prep()
for (int i = 1; i <= 10; ++i) }}
}}int
main()
return0;
}
poj 1664 放蘋果 動態規劃
解題思路 code 1 code 2 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分發 5,1,1和1,1,5是同一種方法 第一行是測試資料的數目t 0 t 20 以下每行均包括二個整數m和n,以空格分開。1 m,n 10 對輸入的每組資料m和n,用一行輸出相應的k...
動態規劃 POJ1664 放蘋果
非常經典的劃分數問題,即相當於把m個物體分成至多n組,求出分組總數。思路 當前狀態dp i j 表示將i個物體分成至多j組的分組總數。對於當前狀態,有以下兩種情形 1 j組中有組為空,則這種情況下分組總數相當於將i個物體分成至多j 1組。即dp i j 1 2 j組中沒有組為空,則每一組至少有乙個物...
動態規劃 遞迴(poj1664 放蘋果)
放蘋果 time limit 1000ms memory limit 10000k total submissions 36485 accepted 22473 description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,...