下面是演算法的介紹:
先看乙個例項:揹包問題
輸出:
package com.huey.dynamic;
public
class
knapsackproblem
;// 物品的重量
int[
] val =
;// 物品的價值 這裡的val[i] 就是前面講的v[i]
int m =4;
// 揹包的容量
int n = val.length;
// 物品的個數
// 建立二維陣列,表
// v[i][j] 表示在前i 個物品中,能夠裝入容量為j 的揹包中的最大價值
int[
] v =
newint
[n +1]
[m +1]
;// 初始化第一行和第一列,在本程式中,可以不去處理,因為預設就是0
for(
int i =
0; i < v.length; i++
)for
(int i =
0; i < v[0]
.length; i++
)// 根據前面得到的公式來動態規劃處理
for(
int i =
1; i < v.length; i++
)else}}
// 輸出一下v 看看目前的情況
for(
int i =
0; i < v.length; i++
) system.out.
println()
;}}}
為了記錄,放入商品的情況,我們定義乙個二維陣列path。
輸出:
package com.huey.dynamic;
public
class
knapsackproblem
;// 物品的重量
int[
] val =
;// 物品的價值 這裡的val[i] 就是前面講的v[i]
int m =4;
// 揹包的容量
int n = val.length;
// 物品的個數
// 建立二維陣列,表
// v[i][j] 表示在前i 個物品中,能夠裝入容量為j 的揹包中的最大價值
int[
] v =
newint
[n +1]
[m +1]
;// 為了記錄放入商品的情況,我們定義乙個二維陣列
int[
] path =
newint
[n +1]
[m +1]
;// 初始化第一行和第一列,在本程式中,可以不去處理,因為預設就是0
for(
int i =
0; i < v.length; i++
)for
(int i =
0; i < v[0]
.length; i++
)// 根據前面得到的公式來動態規劃處理
for(
int i =
1; i < v.length; i++
)else
else}}
}// 輸出一下v 看看目前的情況
for(
int i =
0; i < v.length; i++
) system.out.
println()
;}// 輸出最後我們放入的哪些商品
// 遍歷path,這樣輸出會把所有的放入情況都得到,其實我們只需要最後的放入
// for (int i = 0; i < path.length; i++)
// }
// }
system.out.
println
("***********************************");
int i = path.length -1;
// 行的最大下標
int j = path[i]
.length -1;
// 列的最大下標
while
(i >
0&& j >0)
i--;// 找到乙個存放的商品了,再找下乙個}}
}
c語言資料結構 01揹包問題 動態規劃
兩天的時間都在學習動態規劃 小作業 01揹包問題 資料結構老師布置的這個小作業還真是讓人傷頭腦,自己實在想不出來了便去網上尋找講解,看到一篇不錯的文章 通過金礦模型介紹動態規劃 但是 兩天的時間才完成這個lab 總結 1.思維思路要清晰。2.題目資訊要看清楚。3.改 過程中注意小變數的數值是否同步變...
動態規劃 01揹包
最優二叉查詢樹.cpp 定義控制台應用程式的入口點。01揹包問題。include stdafx.h include include define n 3 the number of real node define m 10 using namespace std int tmain int arg...
01揹包動態規劃
0 1揹包 問題描述 乙個旅行者有乙個最多能用 m公斤的揹包,現在有 n件物品,它們的重量 分別是w1,w2 wn,它們的價值分別為 c1,c2,cn.若每種物品只有一 件求旅行者能獲得最大總價值。輸入格式 w 第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 w第2.n 1 行...