甜點 多重揹包

2022-05-19 06:04:57 字數 1974 閱讀 5316

【問題描述】

小z準備舉辦乙個比賽。他需要提供一些甜點給參賽者來補充能量。每種甜品有一定的能量ti和大小ui,且每種甜點最多有vi個。

小z準備用箱子來包裝甜點。箱子可以容納一定體積的甜點且需要一定的費用。小z有一種魔法,可以將乙個甜點分成多份裝在箱子裡,最後再合在一起(但合成之後必須是完整的乙個)。

小z想知道準備能量至少為p的甜點的最小大小和最少需要多少費用來購買箱子,如果最少費用超過小z所擁有的錢數k則輸出fail。

【輸入格式】

第一行為4個正整數n,m,p, k( 1 ≤ n ≤ 200,1 ≤ m ≤ 200,0 ≤ p ≤ 50000, k <= 50000)分別代表甜點種類,箱子種類和參賽者比賽所需要補充的能量和小z所擁有的錢數。

接下來的n行,每行包含3個整數ti, ui, vi ( 1 ≤ ti ≤ 100,1 ≤ ui ≤ 100,1 ≤ vi ≤ 100) , 代表第i類甜點可以提供ti的能量,它的大小為ui並且小明最多有vi個該種類的甜點。

接下來又有m行,每一行包含3個整數xi, yi, zi ( 1 ≤ xj ≤ 100,1 ≤ yj ≤ 100,1 ≤ zj ≤ 100), 代表第i類箱子可以容納xi大小的甜點,該類箱子的單價yi,並且小z最多可以使用zi個該類的箱子。

【輸出格式】

第一行請輸出最小的甜點大小。

第二行請輸出最小的箱子費用,並且費用不能超過k。否則,輸出fail。

【樣例輸入】

5 3 34 34

1 4 1

9 4 2

5 3 3

1 3 3

5 3 2

3 4 5

6 7 5

5 3 8

【樣例輸出】

1912

【資料範圍與約定】

30%: n, m <= 15, p, k <= 1000

60%: n, m <= 50, p, k <= 5000

100%: n, m <= 200, p <= 50000, k <= 50000

[測試資料](

題解:首先,我們可以以每個甜點的能量為價值,體積為費用,建立乙個多重揹包問題。

由於資料有點大,我們可以選擇二進位制優化或者單調佇列優化。

然後,我們從體積從小到大遍歷一邊,直到找到了乙個能量大於需求,記錄下來這個體積。

然後我們以箱子的體積為價值,費用為費用,跑一邊多重揹包。

費用從小到k遍歷一邊,找到第乙個價值大於體積的費用,記錄下來這個費用。如果最終沒有找到,那麼輸出fail。

**如下

1 #include2 #include3 #include4

const

int maxn = 300;5

intn,m,p,k,t[maxn],u[maxn],v[maxn],x[maxn],y[maxn],z[maxn];

6struct

node p[30000];9

int a[100002],b[100002],tot=0

;10 inline void devide(int

x) 18

if(v[x])

22return;23

}24 inline void devide2(int

x) 32

if(z[x])

36return;37

}38intmain() 50}

51int

ans1;

52for(register int i=1;i<=100000;i++) 58}

59 tot=0;60

for(register int i=1;i<=m;i++) devide2(i);

61for(register int i=1;i<=tot;i++) 65}

66for(register int i=1;i<=k;i++) 71}

72 puts("

fail");

73return0;

74 }

python多重揹包 多重揹包

多重揹包問題 有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。資料範圍 0 n v 100 0 vi wi si 100 樸素版多重揹包問題 樸素版完全揹包問...

多維多重揹包問題 01揹包,完全揹包,多重揹包

csdn 專業it技術社群 登入 blog.csdn.net有n件物品和乙個容量為v的揹包。第i件物品的費用是w i 價值是v i 求將哪些物品裝入揹包可使價值總和最大。1.1空間優化 這要求在每次主迴圈中我們以 v v 0 的遞減順序計算 f v 這樣才能保證計算 f v 時 f v ci 儲存的...

揹包學習 多重揹包揹包

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...