學習動態規劃,一開始一頭霧水,看了好多部落格,寫的都是不太適合自己,這篇部落格寫得通俗易懂其實懂了思想,寫**寫起來就比較簡單了。在這裡寫一下個人的理解:通過把問題分解為更小規模的問題,分到最小的時候肯定會有乙個邊界,然後從邊界開始反過來求解。有點類似於遞迴,不過動態規劃是用陣列或者其他的東西,先把小規模的問題的解存入了陣列中,就不用重複計算,提高了效率。詳細的講解還是看參考的部落格吧
package backpack;
//0-1揹包問題
//給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝
//入揹包中物品的總價值最大
//資料:物品個數n=5,物品重量w[n]=,物品價值v[n]=,
public class package_0_1; //物品的重量
private int v = ; //物品對應的待加
private boolean x = new boolean[5]; //記錄對應的物品有沒有裝入揹包,false表示沒有裝入
private int m=new int[5][11]; //狀態量,記錄最大價值
public package_0_1()
public void getmaxvalue()
//揹包的容量裝不下物品,當然價值就是0
else
}//接著在最後一行填充的基礎上,從倒數第二行開始,從左往右,從底往上填充價值陣列m
for(int i=index-1;i>=0;i--)
else }}
system.out.println("最大價值為:"+m[0][10]);
int j=c;
for(int i=0;i}
//對於最後一件物品,如果m[i][j]不為0,就是放入了揹包
x[w.length-1]=m[w.length-1][j]==0?false:true;
//輸出選擇的狀態,也就是選擇了哪幾個物品
for(int i=0;i}
}public static void main(string args)
}
動態規劃之01揹包問題
首先是問題描述 給定n種物品和一揹包,物品i的重量是wi,其價值是pi,揹包的容量是m,問如何選擇裝入揹包中的物品總價值最大?可以這樣理解 揹包的揹負有上限,因此在這個上限內盡可能多的裝東西,並且價值越多越好。在這裡我之想討論動態規劃解決這個問題的詳細過程。動態規劃是用空間換時間的一種方法的抽象。其...
動態規劃之0 1揹包問題
問題描述 現有n件物品和乙個容量為c的揹包。第i件物品的重量是重量為w i 價值是v i 已知對於一件物品必須選擇取 用1表示 或者不取 用0表示 且每件物品只能被取一次 這就是 0 1 的含義 求放置哪些物品進揹包,可使這些物品的重量總和不超過揹包容量,且價值總和最大。求解思路 0 1揹包問題的遞...
動態規劃之0 1揹包問題
問題描述 0 1揹包問題是應用動態規劃設計求解的典型例題 已知n種物品和乙個可容納c重量的揹包,物品i的重量為w i 產生的效益為p i 在裝包時物品i可以裝入,也可以不裝,但不可拆開裝。問如何裝包,所得裝包總效益最大。演算法分析 最優子結構特性 0 1揹包的最優解具有最優子結構特性。與一般揹包問題...