關於01揹包問題,可以使用回溯法解決。另外,這個方法還可以衍生到其他的一些問題的解決上。
比如:1.有兩艘船,載重量分別是w1,和w2,現在有一批貨,如何裝載,是的兩艘船能夠裝載盡量多的貨物。
這個題目就可以用01揹包的方法解決。即先計算一艘船的揹包問題,然後用剩下的貨物計算另一艘船的揹包問題。
2.給定乙個正整數的集合和乙個值(c),是否存在集合的乙個子集,是的子集裡元素的和是否等於c。
與01揹包的解法類似。
3.設某一機器有n個部件組成,每一種部件都可以從m個不同的的**商出購得,各種**商提供的相同部件的**和重量都不同,是找出總**不超過**上限的最小機器重量.
這個問題同樣可以用01揹包解決,只是在回溯函式裡,需要加入乙個迴圈,計算每個**商購得零件後的**和重量.
/*** 01揹包問題
* 使用回溯演算法實現
* @author ztl**/
public class knapsack
public void backtrace(int i)
}return;
}if (currentweight + weight[i] <= maxweight)
backtrace(i+1);//檢查左子樹
}public void printresult()
system.out.println();
}public static void main(string args);
new knapsack(10,weight);}}
回溯演算法 01揹包問題 Java實現
回溯演算法也叫試探法,通俗的將就是乙個方向的路一直往前走,能走則走,不能走則退回來換乙個方向再試。一般的實現步驟是 針對乙個問題定 的空間,至少包含問題的乙個最優解 用易於搜尋的解空間結構,使得能用回溯方法搜尋整個解空間 以深度優先的方式搜尋整個解空間,並在搜尋過程中通過剪枝函式避免無效搜尋。如上圖...
0 1揹包問題 回溯演算法 java實現
有n種可選物品1,n 放入容量為c的揹包內,使裝入的物品具有最大效益。表示n 物品個數 c 揹包容量 p1,p2,pn 個體物品效益值 w1,w2,wn 個體物品容量 0 1揹包問題的解指 物品1,n的一種放法 x1,xn的0 1賦值 使得效益值最大。假定揹包容量不足以裝入所有物品 面臨選擇 優化原...
0 1揹包問題,回溯實現
0 1揹包 問題描述,noip 2001 裝箱問題 有乙個箱子容量為 v 正整數,0 v 20000 同時有 n個物品 0 n 30,每個物品有乙個體積 正整數 要求n 個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。動態規劃考慮 容量為v的箱子,最多能裝多少單位體積的物品vmax,v vma...