演算法實驗二 回溯法 0 1揹包問題

2021-09-01 00:18:42 字數 930 閱讀 4906

時限:1000ms 記憶體限制:10000k  總時限:3000ms

描述需對容量為c 的揹包進行裝載。從n 個物品中選取裝入揹包的物品,每件物品i 的重量為wi ,價值為pi 。對於可行的揹包裝載,揹包中物品的總重量不能超過揹包的容量,最佳裝載是指所裝入的物品價值最高。

輸入多個測例,每個測例的輸入佔三行。第一行兩個整數:n(n<=10)和c,第二行n個整數分別是w1到wn,第三行n個整數分別是p1到pn。

n 和 c 都等於零標誌輸入結束。

輸出每個測例的輸出佔一行,輸出乙個整數,即最佳裝載的總價值。

輸入樣例

1 21

12 3

2 23 4

0 0輸出樣例14

解析:01揹包問題有很多種解法,這裡介紹兩種。

第一種:回溯法。回溯法使用深度優先的搜尋方式,搜尋了01揹包問題的解空間樹的每乙個節點,最後得出最優解。

#include

#include

int n,c;

int bestv=0,cw,cv;

int w[11],v[11];

void backpack(int cw,int cv,int i)//分別表示當前質量,當前價值,第i件東西

void package()

}printf("%d\n",m[n][c]);

}int main()

return 0;

}注:動態規劃可以解決01揹包問題是因為其具有最優子結構性質,即最終的最優解所包含的子問題的解也是最優的,比如在這個所得的**中,m[n][c]是容量為c時的最優解,m[n][c-1]是容量為c-1時的最優解,以此類推。最優子結構性質是乙個問題可以用動態規劃法所解決的必要條件,最優子結構性質導致問題所有子問題的解可以儲存在乙個**裡,以備後續呼叫,這也引出了動態規劃法另乙個基本性質,即子問題重疊性質,這也是動態規劃從根本上高於回溯法的重要原因。

演算法實驗二 回溯法 堡壘問題

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述城堡是乙個4 4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都...

演算法分析 實驗 4 回溯法求解0 1揹包等問題

目錄實驗總結 本實驗要求基於演算法設計與分析的一般過程 即待求解問題的描述 演算法設計 演算法描述 演算法正確性證明 演算法分析 演算法實現與測試 通過回溯法的在實際問題求解實踐中,加深理解其基本原理和思想以及求解步驟。求解的問題為0 1揹包。作為挑戰 可以考慮回溯法在其他問題 如最大團問題 旅行商...

NOJ 1004) 回溯演算法 01揹包問題

問題描述 需對容量為c 的揹包進行裝載。從n 個物品中選取裝入揹包的物品,每件物品i 的重量為wi 價值為pi 對於可行的揹包裝載,揹包中物品的總重量不能超過揹包的容量,最佳裝載是指所裝入的物品價值最高。輸入多個測例,每個測例的輸入佔三行。第一行兩個整數 n n 10 和c,第二行n個整數分別是w1...