『动态规划·单调队列优化·贪心』BZOJ1233:干草堆

该博客介绍了如何利用动态规划和单调队列优化解决干草堆问题。博主首先提出贪心策略,即为了使干草堆整体高度最大,最下面的干草堆应该尽可能小。接着,通过翻转数组和求前缀和的方法,自底向上进行动态规划,定义f[i]为前i个干草堆能组成的最高塔。博主发现状态转移过程中f[i]的决策具有单调性,并引入g[i]表示第i块干草所属高度的最小总长度。利用单调队列优化,博主给出满足条件的j的最大值的求解方式,从而降低时间复杂度。最后,博主分享了实现这一优化的代码片段。
摘要由CSDN通过智能技术生成

P r o b l e m \mathrm{Problem} Problem

在这里插入图片描述

S o l u t i o n \mathrm {Solution} Solution

对于这道题,我们首先需要知道一个贪心的结论:

  • 如果要使最后的干草堆尽量高,最小面的那一堆一定要尽量小 。

但是知道了这个结论,我们仍然无法知道具体的叠的方案是怎么样的,我们考虑动态规划。

我们可以将数组翻转,求前缀和,自底向上DP。设 f [ i ] f[i] f[i]表示到第 i i i块为止,一共能够叠的最高的塔。

考虑如何转移最优,我们发现f的决策一定具有单调性,即越多方块能叠越高的塔。

显然有 f [ i ] = f [ j ] + 1 f[i]=f[j]+1 f[i]=f[j]+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值