求助昨晚 ABC 的 E 题
  • 板块学术版
  • 楼主Zwb0106
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/4/10 11:46
  • 上次更新2023/10/23 18:50:09
查看原帖
求助昨晚 ABC 的 E 题
304837
Zwb0106楼主2023/4/10 11:46

想了个做法:假设每种物品有 kk 个,然后像处理背包一样进行二进制分组,排序,就转化为子集第 kk 大。然后用 priority_queue 维护二元组 (sum,i)(sum,i),表示和为 sumsum 且选取的最后一个元素是第 ii 个,这样每次取出堆顶元素,插入 (sum−ai+ai+1,i+1)(sum-a_i+a_{i+1},i+1) 和 (sum+ai+1,i+1)(sum+a_{i+1},i+1),可以证明这样会遍历所有子集,取出顺序是单调不降的。这样,取出第 kk 个的时候(用一个变量 cntcnt 记录)的 sumsum 就是答案。

现在有个问题,题目要求是严格第 kk 大,我这个做法只能保证非严格时的复杂度,发现堆顶 sumsum 是非严格的时候 cntcnt 不加 11,然后会 TLE。

有什么改进方案吗?

2023/4/10 11:46
加载中...