如果是可切分的背包問題,那沒什么難度为牍『甙螅基本上就是選擇一個性價比最高的物品先放進去,放完發(fā)現(xiàn)沒有了碉咆,然后放性價比第二高的抖韩,以此類推。
那么如果是商品無法切割疫铜。背包重量有限呢茂浮?這種情況就需要采用動態(tài)規(guī)劃的思想,來完成最優(yōu)的規(guī)劃。
列出公式如下席揽,如果物品質(zhì)量大于袋子質(zhì)量顽馋,那么就是在剩下的物品中求得最優(yōu)即可。如果物品的質(zhì)量小于袋子的質(zhì)量驹尼,那么在兩種方案中選擇最優(yōu)即可趣避。
具體的代碼我已經(jīng)實現(xiàn):
首先,我先定義了一個這樣的數(shù)據(jù)結(jié)構(gòu)
實際上新翎,表示物品的價值和重量用二維數(shù)組就可以了程帕,但Java總愛面向?qū)ο螅@種自定義的數(shù)據(jù)結(jié)構(gòu)會大大豐富可用性地啰,也有較高的可移植性
每定義一個數(shù)據(jù)結(jié)構(gòu)記得內(nèi)部類里面寫上對應(yīng)的get 和 set 方法
在main函數(shù)里面獲取主要的參數(shù)愁拭,并對product List進行初始化處理,為什么要進行初始化呢亏吝,因為后面要用到岭埠,背包問題的第二版我會寫一個不用初始化數(shù)據(jù)的代碼
這樣就獲得了數(shù)據(jù)
接下來最重要的一步就是對數(shù)據(jù)進行處理
其實主要是實現(xiàn)了上面的公式
難點在于數(shù)據(jù)的初始化,到底是從1 開始 還是 從0 開始
怎么找到具體的輸出哪個選項呢