ABC351E
cf想上橙,但没办法all in算法,所以进行复盘,多注重思维积累
刷题记录 2
dp
ABC373F
link:https://atcoder.jp/contests/abc373/tasks/abc373_f
在裸的完全背包上加了个条件:如果购买了
尝试先用正常的dp:记
显然有转移
因此我们可以考虑将dp的第一维用单个物品容量来代替。记
转移一样是
但是这里有个问题,就是单个容量为
因此我们将转移方程写为
怎么算这个
假设我们从
我们转移到
- 首先我们先算出所有单个容量为
的物品在 时对答案的贡献。 - 搞个大顶堆,将这些答案以及对应的
放进去。然后开始计算 ,每次从大顶堆取出答案时,根据取出的答案对应的 ,计算出该物品取 的贡献,重新插到堆里。
Code:https://atcoder.jp/contests/abc373/submissions/59299326
总结:本题的突破口在于将传统的背包dp中枚举第几个物品转换为枚举单个物品的容量,同时还要在意到该题购买同一个物品时其对答案的贡献是单调递减的(从数学上来讲,就是