切換
舊版
前往
大廳
主題

ZeroJudge - d862: NOIP2001 4.裝箱問題 解題心得

Not In My Back Yard | 2019-08-11 22:52:44 | 巴幣 0 | 人氣 496

題目連結:


題目大意:
給定一整數 V (0 ≦ V ≦ 20000),接著一列再給定一正整數 n (0 < n ≦ 30),代表有一箱子體積為 V ,而現在有 n 個物品要裝箱。

接著的 n 列,每列給定一正整數,依序代表這 n 個物品的體積。

從 n 個物品挑出幾個放入箱子裡(不用考慮會卡住之類的,有足夠的剩餘體積便可以放得進去)使得剩餘體積盡可能的小。試問:剩餘體積最小可為多少?



範例輸入:
24
6
8
3
12
7
9
7


範例輸出:
0


解題思維:
換硬幣題目的變形版。此題可視為有 n 種硬幣,看可以湊成的、最接近 V 的金額為多少。

因為每種硬幣只有一個,因此動態規劃(Dynamic Programming)求解的時候不能由小金額到大金額順向 DP 。要從大金額到小金額逆著回來求解。

最後看哪個數字 m 可以被這 n 個值湊出,而且最接近 V 。答案即為 V - m 。

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

創作回應

更多創作