codevs3269 混合揹包 x

2022-04-06 04:55:58 字數 1780 閱讀 6010

3269 混合揹包

時間限制: 1 s

空間限制: 256000 kb

題目等級 : 鑽石 diamond

揹包體積為v ,給出n個物品,每個物品占用體積為vi,價值為wi,每個物品要麼至多取1件,要麼至多取mi件(mi > 1) , 要麼數量無限 , 在所裝物品總體積不超過v的前提下所裝物品的價值的和的最大值是多少?

輸入描述 input description

第一行兩個數n,v,下面n行每行三個數vi,wi,mi表示每個物品的體積,價值與數量,mi=1表示至多取一件,mi>1表示至多取mi件,mi=-1表示數量無限

輸出描述 output description

1個數ans表示所裝物品價值的最大值

樣例輸入 sample input

2 10

3 7 2

2 4 -1

樣例輸出 sample output

資料範圍及提示 data size & hint

對於100%的資料,v <= 200000 , n <= 200

分類標籤 tags 點此展開 

動態規劃

揹包型dp

線性結構

佇列思路:

揹包九講之大集合!

坑點:

有的是正序列舉(完全揹包是正序列舉),有的是逆序列舉(01揹包)

上**:

1)全t**(之樣例都是騙人的):

#include #include 

#include

#include

#include

using

namespace

std;

const

int m = 2e5 + 1

;const

int n = 201

;int

v,n;

intdp[m];

struct

bag t[n];

intmain()

for(int i=1,mi,vi,wi;i<=n;i++)

printf("%d

",dp[v]);

return0;

}

2)正解

#include #include 

#include

#include

#include

using

namespace

std;

const

int m = 2e5 + 1

;const

int n = 201

;int

v,n;

intdp[m];

inline

void zeroonebag(int v,int

w) inline

void completebag(int v,int

w) inline

void multibag(int v,int w,int

m)

int k=1

;

while(k<=m)

zeroonebag(m*v,m*w);

}int

main()

printf("%d

",dp[v]);

return0;

}

codevs 3269 混合揹包

題目描述 description 揹包體積為v 給出n個物品,每個物品占用體積為vi,價值為wi,每個物品要麼至多取1件,要麼至多取mi件 mi 1 要麼數量無限 在所裝物品總體積不超過v的前提下所裝物品的價值的和的最大值是多少?輸入描述 input description 第一行兩個數n,v,下面...

codevs 3269 混合揹包

題目描述 description 揹包體積為v,給出n個物品,每個物品占用體積為vi,價值為wi,每個物品要麼至多取1件,要麼至多取mi件 mi 1 要麼數量無限 在所裝物品總體積不超過v的前提下所裝物品的價值的和的最大值是多少?輸入描述 input description 第一行兩個數n,v,下面...

Codevs 3269 混合揹包

時間限制 1 s 空間限制 256000 kb 題目等級 鑽石 diamond description 揹包體積為v 給出n個物品,每個物品占用體積為vi,價值為wi,每個物品要麼至多取1件,要麼至多取mi件 mi 1 要麼數量無限 在所裝物品總體積不超過v的前提下所裝物品的價值的和的最大值是多少?...