01揹包是dp最經典的例子,深刻理解01揹包會對你有很大的幫助
動態規劃其實就是用之前已經求好的解,來求解現在要求解的問題
狀態轉移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);
方程含義:若將當前物品放入揹包能增大value,則放入
dp[i][j]表示在有前i件物品且揹包容量為j時的最大價值;我們用dp[i][j]表示當前,那麼dp[i-1][j]表示不放入當前物品且揹包容量為j時的最大value值;dp[i-1][j-weight[i]]表示不放入當前物品且揹包容量為j-weight[i]時的最大value值,注意:j-weight[i]為當前物品騰出位置,假設當前物品i的weight值為2,當前揹包容量為7,若想放入當前物品,則揹包的已使用容量必須是5,即j-weight[i],而dp[i-1][j-weight[i]]的value值又是未放入當前物品i時揹包容量為j-weight[i]時的最大值,所以再加上當前物品i的value值就可以執行max操作,即執行上面的方程含義:若將當前物品放入揹包能增大value,則放入
我感覺很囉嗦但是又想把我想到的都講一下,就這樣把,希望你們能懂,最好自己手動模擬一遍,這樣可以感覺出很多東西
01揹包問題的理解
01揹包是 n個物品重量和價值分別為w i v i 揹包可以容納的重量為weight,怎麼裝下最大價值的物品?狀態轉移方程是 value i,w max value i 1,w w i v i value i 1,w 要求w的解,那麼先求w w i 的解,w w i 的值只有在知道了i是多少時才知道...
揹包問題的自己理解
public static void print int a system.out.println 完全的揹包問題 public static void comlete int v,int w,int c,int m for int j w n j c j 後面裝入的物品要根據前乙個裝入的價值判斷是...
揹包 01揹包
01揹包 有n種物品與承重為m的揹包。每種物品只有一件,每個物品都有對應的重量weight i 與價值value i 求解如何裝包使得價值最大。dp i,v 表示前i個物體 包括第i個 面對容量為v的揹包的最大價值,c i 代表物體i的重量,w i 代表物體i的價值 如果第i個物體不放入揹包,則揹包...