01揹包和完全揹包的小結

2021-08-28 14:29:56 字數 938 閱讀 8690

第一重迴圈 便利各個物品

第二重迴圈 從最大體積便利到cosmax->cos[i] 第i件物品的花費

重點:第二重迴圈需要倒敘便利,這是因為 要保證第 i 次迴圈中的狀態 dp[i][v]是由狀態 dp[i-1][v-c[i]]遞推而來。換句話 說,這正是為了保證每件物品只選一次

模板:

#include

#include

#include

using namespace std;

int dp[

1005];

int cos[

105]

;int val[

105]

;int

main()

for(

int i =

1;i<=n;i++)}

cout<<}}

第一重迴圈 便利各個物品

第二重迴圈 從最大體積便利到cos[i] ->cosmax (第i件物品的花費)

重點:第二重迴圈需要正序便利,完全揹包的特點恰是每種物品可選無限件,所以在考慮「加選一件第 i 種物 品」這種策略時,卻正需要乙個可能已選入第 i 種物品的子結果 f[i][v-c[i]], 所以就可以並且必須採用 v=0…v 的順序迴圈。這就是這個簡單的程式為何成立 的道理模板:

#include

#include

#include

using namespace std;

int dp[

100005];

int cos[

10005];

int val[

10005];

intmain()

for(

int i =

1;i<=n;i++)}

cout<<}}

01揹包和完全揹包

在hihocoder上面的題目中看到的這個問題,總結一下。先看01揹包問題。01揹包問題 乙個揹包總容量為v,現在有n個物品,第i個 物品體積為weight i 價值為value i 現在往揹包裡面裝東西,怎麼裝能使揹包的內物品價值最大?看到這個問題,可能會想到貪心演算法,但是貪心其實是不對的。例如...

0 1揹包和完全揹包

一.0 1揹包 1.0 1揹包指的是每件物品要麼取一次,要麼不取,目的是找到裝到揹包裡最大價值。c n 代表物體重量,w n 代表物體價值,v代表揹包容量。2.時間複雜度 o n v n指的是物品個數,v指的是揹包的容量,這是最優情況,無法再優。3.空間複雜度 原始 f n 1 v 1 改進 f v...

01揹包,完全揹包

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