01揹包 一維空間優化

2021-10-10 07:02:00 字數 991 閱讀 2003

01揹包是最最基礎的揹包問題;

有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。

第 i 件物品的體積是 vi,價值是 wi。

求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。

輸出最大價值。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。

接下來有 n 行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i 件物品的體積和價值。

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

0用二維來做:

#include

#include

using

namespace std;

const

int n =

1010

;int f[n]

[n];

int v[n]

, w[n]

;int

main()

}int ans =0;

for(

int i =

1; i <= m; i ++

) ans =

max(ans, f[n]

[i])

;

cout << ans << endl;

return0;

}

對空間進行優化

#include

#include

using

namespace std;

const

int n =

1010

;int f[n]

;int v[n]

, w[n]

;int

main()

cout << f[m]

<< endl;

return0;

}

完全揹包問題 一維空間優化

有 n 種物品和乙個容量是 v 的揹包,每種物品都有無限件可用。第 i 種物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n 行,每行兩個整數...

01揹包之空間優化

前言 上篇suibi寫到了01揹包的二維陣列做法 不知道的戳這 可是空間太大了,如果出題人有意,那你就 怎麼辦呢?那咱們就用一維陣列來存吧。includeusing namespace std int bag,n,v 101 w 101 dp 1001 int main cout變數同上。同樣列舉每...

看懂0 1揹包與完全揹包的空間優化

0 1揹包的主要思路就是 這件物品,取還是不取。用乙個二維陣列dp i v 來表示對第i個物品,揹包容量為v時的情況。c i 表示第i件物品的體積,w i 表示第i件物品的價值。那麼考慮第i件物品取與不取 如果不取,那麼就可以轉化為i 1件物品 容量仍然為v 價值沒有增加的情況 dp i 1 v 如...