藍橋杯 揹包問題 2 23

2021-10-19 22:25:25 字數 1446 閱讀 6772

報時助手(藍橋杯 基礎練習)

定義字元陣列 vert, %s 輸出

#include

#include

#include

using

namespace std;

char vert[50]

[20]=

;int

main()

puts(""

);return0;

}

1. 01揹包

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

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

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

輸出最大價值。

f[i][j]表示看前 i 個物品,體積極限是 j 的情況下價值的最大值

第 i 個物品有選與不選兩種情況:

優化:將二維陣列等價變換為一維陣列

2.完全揹包

每種物品無限件可用

for(int k = 0; k * v[i] <= j; k ++ )

f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);

優化:一維

3.多重揹包

第 i 種物品最多有 si 件

f[i][j] = max;

k = 0, 1, 2, … s[i] (&& k * v[i] <= j

4.多重揹包的二進位制優化

最少可用 上取整 logx 個數表示 1 ~ x

如 12

12 - 202^

20= 11

11 - 212^

21= 9

9 - 222^

22= 5

12 = 1 + 2 + 4 + 5

1 2 4 可表示 1 ~ 7,每種表示 + 5 可表示 5 ~ 12,所以 1 2 4 5 表示出 0 ~ 12 內的所有數

5.分組揹包

每組物品有若干個,同一組內的物品最多只能選乙個。

每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。

p1048 [noip2005 普及組] 採藥(洛谷)

#include

#include

using

namespace std;

const

int n =

1010

, m =

110;

int v[m]

, w[m]

, f[n]

;int

main()

藍橋杯 揹包問題

include includeusing namespace std const int maxn 30 int n,v,maxvalue 0 int w maxn c maxn void dfs int index,int sumw,int sumc return 岔道口 dfs index 1,...

藍橋杯 練習(2 23)

給出n個數,找出這n個數的最大值,最小值,和。第一行為整數n,表示數的個數。第二行有n個數,為給定的n個數,每個數的絕對值都小於10000。輸出三行,每行乙個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。51 3 2 4 55 2 111 n 10000。inc...

藍橋杯 01揹包

演算法提高 01揹包 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定n個物品,每個物品有乙個重量w和乙個價值v.你有乙個能裝m重量的揹包.問怎麼裝使得所裝價值最大.每個物品只有乙個.輸入格式 輸入的第一行包含兩個整數n,m,分別表示物品的個數和揹包能裝重量。以後n行每行兩個數wi和v...