編寫程式,用動態規劃法求解0 1揹包問題

2022-09-06 23:48:07 字數 1018 閱讀 7864

要求:編寫程式,用動態規劃法求解0—1揹包問題。

一、 實驗目的與要求

1、明確0-1揹包問題的概念

2、利用動態規劃解決0-1揹包問題問題

二、實驗題:

0-1揹包問題(knapsack problem), 某商店有n個物品,第i個物品價值為vi,重量(或稱權值)為wi,其中vi和wi為非負數, 揹包的容量為w,w為一非負數。目標是如何選擇裝入揹包的物品, 使裝入揹包的物品總價值最大,所選商品的乙個可行解即所選商品的序列如何?揹包問題與0-1揹包問題的不同點在於,在選擇物品裝入揹包時,可以只選擇物品的一部分, 而不一定要選擇物品的全部。

可將這個問題形式描述如下:

約束條件為:

舉例:若商店一共有5類商品,重量分別為:3,4,7,8,9

價值分別為:4,5,10,11,13

則:所選商品的最大價值為24

所選商品的乙個序列為:0 0 0 1 1

三、實驗**

#include <>

#include<>

#include<>

int min(int w,int c)

int max(int w,int c)

void knapsack(int v,int w,int c,int n,int**m) //求最優值

m[1][c]=m[2][c];

if(c>=w[1])

m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);

cout<<"最優值:"

int traceback(int **m,int w,int c,int n,int x) //回代,求最優解

x[n]=(m[n][c])?1:0;

for(int y=1;y<=n;y++)

cout

} void main()

knapsack(v,w,c,n,m);

traceback(m,w,c,n,x);

}四、實驗結果

動態規劃法解

2011級3班張思源 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。為了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用...

揹包問題的動態規劃法

揹包問題 在m件物品取出若干件放在空間為w的揹包裡,每件物品的重量為w1,w 2 wn,與之相對應的價值為p1,p2 pn。求出獲得最大價值的方案。注意 在本題中,所有的重量值均為整數。演算法分析 對於揹包問題,通常的處理方法是搜尋。用遞迴來完成搜尋,演算法設計如下 function make i ...

最大欄位和問題動態規劃法

淮海工學院計算機工程學院 實驗報告書 課程名 演算法分析與設計 題目 實驗2 動態規劃演算法 最大子段和問題 班級軟體081班 學號110831116 姓名陳點點 實驗2 動態規劃演算法 實驗目的和要求 1 深刻掌握動態規劃法的設計思想並能熟練運用 2 理解這樣乙個觀點 同樣的問題可以用不同的方法解...