题目链接
题解
以前看别人博客,在考场上用费用流做,一直以为这题是毒瘤网络流题
没想到竟然是贪心模拟题。。。
如果只有一个蔬菜呢?这就是一个经典的普及难度的贪心,正着推面临优先选择的困难,而逆着推由于不存在淘汰,所以可以贪心选最大的
首先
\(s_i\)的限制很容易处理,只需将每一个蔬菜分出一个价值
\(a_i + s_i\)且过期时间为该蔬菜最后一个的蔬菜
现在我们计算出每个蔬菜最晚放置的时间点,将每一天看做一个盒子,我们贪心地优先将价值大的蔬菜从它能放入的地方一直往前放
由于每个盒子最多放
\(10\)个,我们用并查集合并相邻的放满的盒子,全部放置满只需
\(O(10^5m)\) 但是这样对于每一个
\(p\)都要算一次,实则不然,我们先算出最大的
\(p\)的答案,发现前
\(p - 1\)天能使用的蔬菜包含前
\(p\)天能使用的蔬菜,我们用堆维护已放入的蔬菜,对于前
\(p - 1\)天,我们只需把堆中的蔬菜减至
\((p - 1)m\)即可
复杂度\(O(10^5mlogn)\)
#include #include #include #include #include #include #include #include