01揹包 B站正月點燈籠講解版和yxc版

2021-09-26 08:37:36 字數 1034 閱讀 4240

題目鏈結

從1開始,f[i][j]表示前i個物品占用j空間的最大價值。

v表示第i件物品的體積,p表示第i件物品的價值。

f[i][j]可以有兩個轉移**。

時間複雜度o(n

m)

o(nm)

o(nm

)

#include

#include

using

namespace std;

const

int n =

1010

;int f[n]

[n];

int v[n]

, w[n]

;int n, m;

intmain()

}}int res =0;

for(

int i =

1; i <= m; i++

) res =

max(res, f[n]

[i])

; cout

}

使用滾動陣列將二維的資料優化為一維,降低了空間複雜度。

直接套模板

//物品數量是5 最大容量是 20 

int d[21]

=;void

knapsack2()

}}

#include

using namespace std;

int dp[6]

[21]=

;//dp[i][c]表示前i件物品恰好裝入容量為c的揹包所能獲得的最大價值

int d[21]

=;int w=

;//讀入的時候做個偏移

int v=

;//物品數量是5 最大容量是 20

void

knapsack()

}}//物品數量是5 最大容量是 20

void

knapsack2()

}}intmain()

01揹包精講

給定乙個物品集合s 物品i具有重量wi和價值vi。揹包能承受能承受的最大載重量不超過w。揹包問題就是找到乙個物品子集s 屬於s,使得maxewi w。所謂01揹包就是物品要麼整個地選取,要麼不取。首先我們先要肯定一件事,假設子問題 i,w 的最優裝載中含有物品i,則其中的子問題 i 1,w wi 的...

揹包精講之 01揹包

了解01揹包時應該注意01揹包在問法上的差別 初始化分兩種情況 1 如果揹包要求正好裝滿則初始化 f 0 0,f 1 w inf 2 如果不需要正好裝滿 f 0 v 0 題目 有n 件物品和乙個容量為 v的揹包。第 i件物品的費用是 c i 價值是 w i 求解將哪些物品裝入揹包可使價值總和最大。整...

揹包九講之 01揹包

01揹包是最基礎的揹包問題,其中01代表的就是第i個物品的選或不選,在此先設v i 為體積,w i 為價值。很顯然,我們可以使用二位陣列dp i j 來表示前i個物品在揹包容量為j的時候可存放的最大價值。首先dp 0 0 0是很顯然的。而計算dp i j 時,存在01兩種情況 選或不選第i件物品。1...