貪心算法:貪心算法基於的思想是每一次選擇都做當前最好的選擇,這樣最後的結果雖然不必定是最優解,可是也不會比最優解差不少。舉個例子說明可能好懂一些:一幫基友去聚餐,菜是一份一份上的,我每一次夾菜都只夾牛肉/海鮮吃,可能到最後我吃的牛肉/海鮮不少,但不必定表明我吃掉的東西的總價值最高,可是相對來講價值也很高了換句話說,對於貪心算法,其核心在於設定一個標準讓咱們去貪。回到這個問題,這個標準就有三種設法了:一、價值最高的先裝進揹包;二、重量最低的先裝進包;三、性價比(價值和重量的比值)最高的先裝進揹包。我在這裏用的是第三種方法,用快排做了排序。在 裝的過程當中要注意的就是,當前物品能不能放進揹包。這個是須要考慮的。由於揹包問題也有好幾種,如:0-1揹包問題(每種物品只能拿一次)、徹底揹包問題 (每種物品都能拿無限次)、多重揹包問題(每種物品都有必定的數量能夠拿)。因此在不一樣狀況下貪心算法的一些細節設計也是不同的,這個須要本身考慮。算法
動態規劃算法:貫穿動態規劃算法的就是狀態和狀態轉移方程這兩個東西,而要獲得這兩個東西須要咱們把咱們的問題分解爲更小的子問題,經過分析子問題去得到。數組
那麼回到咱們這個問題,因爲每次裝東西進揹包,咱們只考慮可否裝進,以及是否當前狀態下的最優選擇,也就是說,咱們須要用揹包的容量去設計一個數組,存儲每一單位個容量的最大價值是多少,以此類推,得到揹包容量下的最大價值是多少。
設計