題目連結:
給定一整數 V (0 ≦ V ≦ 20000),接著一列再給定一正整數 n (0 < n ≦ 30),代表有一箱子體積為 V ,而現在有 n 個物品要裝箱。
接著的 n 列,每列給定一正整數,依序代表這 n 個物品的體積。
從 n 個物品挑出幾個放入箱子裡(不用考慮會卡住之類的,有足夠的剩餘體積便可以放得進去)使得剩餘體積盡可能的小。試問:剩餘體積最小可為多少?
換硬幣題目的變形版。此題可視為有 n 種硬幣,看可以湊成的、最接近 V 的金額為多少。
因為每種硬幣只有一個,因此動態規劃(Dynamic Programming)求解的時候不能由小金額到大金額順向 DP 。要從大金額到小金額逆著回來求解。
最後看哪個數字 m 可以被這 n 個值湊出,而且最接近 V 。答案即為 V - m 。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。