会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
必买货必须全拿,凑单货每件最多加一次,券每张最多启用一次。券的先后会改变后面的现价,所以门槛能不能过,取决于前面已经套过哪些券。a、b、c 都很小,用子集枚举配合全排列即可。
- 先把 a 件必买货的标价加总。一件凑单货都不加、一张券都不用,实付就是这个和,但它不一定最小。
- 用二进制枚举 b 件凑单货的全部子集,得到一种订单现价。b=0 时只有“不加”这一种。
- 对这一种现价,再枚举 c 张券的全部子集,并对子集做全排列。空子集表示一张券都不用。
- 沿着一种次序套用:只有现价 ≥g 才能启用。f=0 时把现价减去 d;f=1 时把现价改成 ⌊现价×d/100⌋。不够门槛就跳过这张,继续看后面的券。
- 一张券扣完或折完之后的新现价,才是下一张券的对照基准。全部试完如果现价是负数,改记成 0。