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 如...