三分 + 贪心.
乍一看有点像网络流,但天数太大了,没法处理.
先将那些没用的食物扔掉,即,若存在 $i,j$ 满足 $S_i\le S_j,P_i\ge P_j$ ,则 $i$ 这种食物就可以扔掉了.
考虑将外卖小哥来的次数记为 $x$ ,则在最优策略下,能宅的时间 $f(x)$ 是一个关于 $x$ 的先增后减的单峰函数.
这可以感性理解?如果来的次数少,则每次会买贵的,但运费少,若来的次数多,则每次会买便宜的,但运费多.
于是可以三分 $x$ ,考虑在给定 $x$ 时如何计算 $f(x)$ .
每次送外卖时都选择当前最便宜的食物,如果保质期过了,就考虑次便宜的食物,直到买不起了,就退出.
时间复杂度 $O(n\cdot \log S)$ .
注意需要先算一个不算太大的上界.
1 | //%std |