題目連結:
給定兩正整數 T 、 M (1 ≦ T ≦ 1000 , 1 ≦ M ≦ 100),依序代表採藥最多總共能花費的時間以及有藥草的個數有 M 個。
接著的 M 列輸入,每列給定兩正整數(皆介於 1 (含)~ 100 (含)),代表其中一株草藥採集所需要時間以及其價值。
試問:在時間 T 之內,能夠得到的總價值最大為何?
典型的背包問題。背包問題中的重量等同於本題的採集時間。
定義一二維陣列 DPi, j ,其中的 i 代表第 1 ~ i 個藥草(在此將編號當作給定順序)、 j 代表是時間。因此 DPi, j 所代表的意思是在耗費了 j 單位時間的狀況下,採集第 1 ~ i 個其中幾個所能得到最大的價值。
因此,可以看到 DP 的遞迴式為(假設第 k 個藥草的價值為 Vk 、花費時間 Tk )
DPi, j = max(DPi, j , DPi - 1, j - Tk + Vk ) 對於 j ≧ Tk
而初始條件將 DP0, j (對於所有 j 值)設為 0 。
然後依序跑過每個物品即可得出所求,即 DPM, T 的值。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。