切換
舊版
前往
大廳
主題

ZeroJudge - b140: NOIP2005 3.採藥 解題心得

Not In My Back Yard | 2019-09-22 22:20:53 | 巴幣 0 | 人氣 499

題目連結:


題目大意:
給定兩正整數 T 、 M (1 ≦ T ≦ 1000 , 1 ≦ M ≦ 100),依序代表採藥最多總共能花費的時間以及有藥草的個數有 M 個。

接著的 M 列輸入,每列給定兩正整數(皆介於 1 (含)~ 100 (含)),代表其中一株草藥採集所需要時間以及其價值。

試問:在時間 T 之內,能夠得到的總價值最大為何?



範例輸入:
70 3
71 100
69 1
1 2


範例輸出:
3


解題思維:
典型的背包問題。背包問題中的重量等同於本題的採集時間。

定義一二維陣列 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 的值。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作