双十一最低实付
暴力枚举约 913 字大约 3 分钟
P5614. 双十一最低实付
场次:2026年10月10日-非AI方向 · 来源:CodeFun2000 P5614
题目描述
临近双十一,小明打算采买一批货物。其中 件属于非买不可,另外 件是可加可不加的凑单货。他手里同时还攥着 张券,每一张都标明了种类(减钱或者打折)以及启用条件。请算出小明把账结清时,实际掏出的钱最少能压到多少。
规则说明:
1、货物怎么买:
- 凡是非买不可的货,都要一件不落地全部拿下。
- 凑单货由你决定放进或不放进购物车,同一件至多放进一次。
2、券怎么启用:
- 每一张券至多启用一次,也可以整张弃用。
- 启用的先后允许自行排列,应当找出让实付最小的那种次序。
- 每张券带一个启用条件 (正整数)。意思是,套用它的前一刻,订单现价得满足 ,不然这张就不能套用。
3、券分成哪两类:
- :减钱券。套用之后,把现价立刻扣掉 (正整数)。
- :打折券。套用之后,现价改写成 ,也就是把小数直接舍掉。
- 注意:一张券生效完毕,算出来的新现价,会变成后面其余券的对照基准。
输入格式
第一行给出三个整数 、、(,,)。
紧随其后单独一行,写下 个整数,依次是非买不可那些货的标价(单个标价 )。
再往后一行,写下 个整数,依次是凑单货的标价(单个标价 )。当 时,这一行直接省掉。
最后还有 行,每一行对应一张券,书写次序是 、、。
只允许取 或者 。
和 都得是正整数(若该券属于打折,则 代表折扣比例,比如写 就是按八折计)。
输出格式
交出一行,里面只放一个整数,代表结账最少要掏的钱。
提示
提示
1、要是全部选定的券都套完后,现价掉成了负数,交卷时改记成 。
示例
示例 1
输入:
2 1 2
80 40
30
0 150 40
1 100 80输出:
88说明:
只拿非买不可的两件,标价相加是 。减钱券要现价至少 ,此刻用不上;打折券可以套,。
把标价 的凑单货也放进去,现价变成 。先扣掉 得到 ,再按八折得到 。若先打八折得到 ,就够不着减钱券的条件,实付停在 。只扣不折是 ,只折不扣是 。这几种结法里最小的是 。
示例 2
输入:
2 1 2
60 40
20
0 100 30
1 80 50输出:
45说明:
非买不可的两件合计 。这时先按五折计算得到 ,减钱券的条件就达不到;先扣掉 得到 ,五折券要求现价至少 ,同样套不上。所以只拿这些必买货,最好是 。
再放入标价 的凑单货,现价升到 。先扣掉 得到 ,接着按五折得到 。先按五折会得到 ,减钱券要求的 够不着。因此实付最少是 。