AcWing 3 完全揹包問題

2022-10-11 04:18:08 字數 1083 閱讀 9084

樸素做法(會超時)

#includeusing namespace std;

const int n = 1010;

int n, m;

int v[n], w[n];

int f[n][n];

int main()

$ f[i][j] $ 需要更新的情況:

選 \(k\)(\(k\) 可以為 \(0\))個第 \(i\) 個物品,前提是能夠裝得下 \(k\) 個第 \(i\) 個物品,也就是 \(j >= k \cdot v[i]\),在這種情況下,還需要在前 \(i - 1\) 個物品中選擇,揹包容量為 \(j - k \cdot v[i]\),也就是 \(f[i - 1][j - k \cdot v[i]]\),最後的 $f[i][j] = f[i - 1][j - k \cdot v[i]] + k \cdot w[i] $

狀態轉移:$ f[i][j] = max( f[i - 1][j - k \cdot v[i]] + k \cdot w[i] )$ $ (k = 0, 1, 2, \cdots ,\left \lfloor \frac} \right \rfloor) $

優化(二維陣列)

#includeusing namespace std;

const int n = 1010;

int n, m;

int v[n], w[n];

int f[n][n];

int main()

cout << f[n][m] << endl;

return 0;

}

一維陣列優化

#includeusing namespace std;

const int n = 1010;

int n, m;

int v[n], w[n];

int f[n];

int main()

acwing 3 完全揹包問題

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

ACWing 3 完全揹包問題

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

AcWing 3 完全揹包問題

題目描述 解題思路 與01揹包問題解法 相似 01揹包問題 與01揹包問題不同點 1 每件物品可以在揹包容量足夠的情況下無限制拿取。2 最大價值不一定在list n m 上需要對list的第m列排序。時間複雜度 o n n 源 include include includeusing namespa...