必买货必须全拿,凑单货每件最多加一次,券每张最多启用一次。券的先后会改变后面的现价,所以门槛能不能过,取决于前面已经套过哪些券。a、b、c 都很小,用子集枚举配合全排列即可。
临近双十一,小明打算采买一批货物。其中 a 件属于非买不可,另外 b 件是可加可不加的凑单货。他手里同时还攥着 c 张券,每一张都标明了种类(减钱或者打折)以及启用条件。请算出小明把账结清时,实际掏出的钱最少能压到多少。
规则说明:
1、货物怎么买:
2、券怎么启用:
3、券分成哪两类:
第一行给出三个整数 a、b、c(1≤a≤10,0≤b≤10,0≤c≤5)。
紧随其后单独一行,写下 a 个整数,依次是非买不可那些货的标价(单个标价 ≤1000)。
再往后一行,写下 b 个整数,依次是凑单货的标价(单个标价 ≤1000)。当 b=0 时,这一行直接省掉。
最后还有 c 行,每一行对应一张券,书写次序是 f、g、d。
f 只允许取 0 或者 1。
g 和 d 都得是正整数(若该券属于打折,则 d 代表折扣比例,比如写 80 就是按八折计)。
交出一行,里面只放一个整数,代表结账最少要掏的钱。
提示
1、要是全部选定的券都套完后,现价掉成了负数,交卷时改记成 0。
输入
2 1 2
80 40
30
0 150 40
1 100 80
输出
88
说明
只拿非买不可的两件,标价相加是 80+40=120。减钱券要现价至少 150,此刻用不上;打折券可以套,120×80/100=96。
把标价 30 的凑单货也放进去,现价变成 150。先扣掉 40 得到 110,再按八折得到 ⌊110×80/100⌋=88。若先打八折得到 120,就够不着减钱券的条件,实付停在 120。只扣不折是 110,只折不扣是 120。这几种结法里最小的是 88。
输入
2 1 2
60 40
20
0 100 30
1 80 50
输出
45
说明
非买不可的两件合计 60+40=100。这时先按五折计算得到 50,减钱券的条件就达不到;先扣掉 30 得到 70,五折券要求现价至少 80,同样套不上。所以只拿这些必买货,最好是 50。
再放入标价 20 的凑单货,现价升到 120。先扣掉 30 得到 90,接着按五折得到 ⌊90×50/100⌋=45。先按五折会得到 60,减钱券要求的 100 够不着。因此实付最少是 45。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册