01揹包,完全揹包C 實現

2021-08-27 00:01:22 字數 1078 閱讀 3745

首先,上自己的**,由於**注釋詳細,我就不解釋啦。看**就好o(∩_∩)o。

**轉換為了01揹包問題求解。

**部分演算法與測驗資料資料參照了

不了解01揹包演算法的同學也可以到上述**先學習。

本**可以輸出價值與揹包中的物品。

先為大家雙手奉上執行結果。

#define volumn 14 //揹包總容量為volumn-1

#define n 7 //存在n-1個物品

//包裹結構

typedef struct apac

}apac,*ppac;

int main()

;//為了方便表示,0號位不使用,1~6表示價值

int w[n] = ;//同樣,表示重量

//宣告揹包二維陣列

apac m[n][volumn];

for (int i = 0; i < n; i++) }

//採用01揹包方法,增加第三重k迴圈,求最值。

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

//記錄揹包價值

m[i][j].value = max(m[i][j].value, max(m[i - 1][j].value, m[i - 1][j - k * w[i]].value + k * v[i]));

}else

} }//輸出揹包價值

cout << "揹包價值" << endl;

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

cout << endl;

} cout << endl;

//輸出揹包組成

cout << "揹包組成" << endl;

int y = volumn-1;

for (int i = n-1; i > 0; i--)

cout << endl;

}

01揹包,完全揹包

動態規劃 動態規劃的核心是狀態以及狀態轉移方程。需要定義乙個 i,j 狀態以及該狀態的指標函式d i,j 01揹包 有n種物品,每種只有乙個,第i件物品的體積為vi質量為wi。選一些物品裝到體積為c的揹包中,使其體積不超過c的前提下重量最大。namevw abcd e 子問題定義 dp i j 表示...

01揹包 完全揹包

本文主要使用一維陣列進行使用 意思 01揹包 代表物品只有兩種狀態,只能使用一次。如,dp i max dp i dp i wight j value j 代表容量為i所獲得的最大利潤。完全揹包 乙個物品可以使用無限次 技巧 1.如果是0 1揹包,即陣列中的元素不可重複使用,nums放在外迴圈,ta...

揹包 01揹包,完全揹包,多重揹包

哈哈 01揹包 f i v max 完全揹包 f i v max 多重揹包 f i v max include include include include include define maxn 1000 using namespace std int n,cap int w maxn 重量 花...