题意分析
首先这道题不可以使用简单的贪心来做
根据\(DP\) 我们令\(dp[i]\)表示当前到了\(i\)一共做了\(dp[i]\)次合并
\(pre[i]\)表示当前合并到了\(i\)后序列末尾的数
那么\[dp[i]=min\{dp[j]+i-j,sum[i]-sum[j]≥pre[j]\}\]
可惜是\(O(n^2)\)的
我们考虑由于是\(dp[i]=dp[j]+val_i\)的形式
所以我们可以使用单调队列优化
\[sum[i]≥sum[j]+pre[j]\]
根据贪心法则 我们希望恰好满足
所以我们维护一个递增的单调队列
CODE:
#include #include #include #include #include #include #include #include #include
HEOI 2019 RP++