0x50 动态规划(练习)20:干草堆(题解)

博客探讨了一道关于干草堆的动态规划问题,解释了为何贪心策略不起作用,并给出了ZKW巨佬和CLB奆佬的证明思路,讨论了如何构造最优解并避免后效性的问题。
摘要由CSDN通过智能技术生成

题意

题目链接

【题意】
 奶牛们讨厌黑暗。
 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡。
 一共有N大包的干草(从1到N编号)依靠传送带连续的传输进牛棚来。
 第i包干草有一个宽度Wi。
 所有的干草包的厚度和高度都为1。
Bessie必须利用所有N包干草来建立起干草堆。
 她可以想放多少包就放多少包来建立起草堆的地基(当然是紧紧的放在一行中)。
 接下来她可以将下一个草包放在之前一级的上方来建立新的一级。
 注意:每一级不能比下面的一级宽。
 她持续的这么放置,直到所有的草包都被安置完成。
 她必须按照草包进入牛棚的顺序堆放草包。
 说得更清楚一些:一旦她将一个草包放在第二级 ,那么她不能将接下来的草包放在第一级上。
Bessie的目标是建立起最高的草包堆。 
 【输入格式】
 第1行:一个整数N。
 第2..N+1行:第i+1行包含整数Wi。 
 【输出格式】
 输出一个整数,表示草包堆的最高的高度。 
 【数据范围】
1≤N≤100000,
 1≤Wi≤10000 
【输入样例】
3
 1
 2
 3
【输出样例】
2 

题解

第一眼看到这个题目,WOW,大水题,怕不是一道SB的贪心,出题人是不是S,为什么要用DP。

只要顶层最小不就可以让层数最多了吗?

于是当快乐的打完代码,发现WA了,马上大骂出题人数据错了。

下载数据看到这一组:

6
9 8 2 1 5 5 

╭(╯^╰)╮,肯定错了,用我们的方法一看:|9 8 2 1|5|5|,三组呀,哪来的四组?不对!|9|8|2 1 5|5|!!!!

出题人:你大爷还是你大爷。。。

没错我们其实可以发现顶层最小有可能因为下面的一些小数字导致第二层很大,然后陷入恶性循环,有时候我们其实可以把一些小数字放到上面一层的。

于是我们又蹦出一个思路,难道是下面一层最小且可以堆起来的话,层数一定是最大的?

虽然不能证明但是就是感觉是对的,上网一查,ZKW巨佬已经证明了(一下做了一点点修改,方便看懂QMQ):
任意取出一个能使层数最高的方案,设有 C A C_A CA层,把其中从下往上每一层最大的块编号记为 A i A_i Ai;任取一个能使底边最短的方案,设有 C B C_B CB层(定义 C B < C A C_B<C_A CB<CA,这样可以严格证明一定存在一个 k k k),把其中从下往上每一层最大的块编号记为 B i B_i Bi。 显然 A C B < = B C B A_{C_B}<=B_{C_B} ACB

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值