首页 > 其他 > 详细

【51Nod】1519 拆方块 贪心+递推

时间:2018-05-24 14:33:21      阅读:193      评论:0      收藏:0      [点我收藏+]

【题目】1519 拆方块
【题意】给定n个正整数,\(A_i\)表示第i堆叠了\(A_i\)个石子。每轮操作将至少有一面裸露的石子消除,问几轮所有石子均被消除。\(n \leq 10^5\)
【算法】贪心+递推
观察每轮操作的变化:

\[A_i=min \{ A_i-1,A_{i-1},A_{i+1} \} \]

继续推导,因为每一轮要么-1要么取左右,那么也就是一个数传递到另一个位置要加上它们之间距离的代价(一轮一格,每轮少一个 -1 ),也就是每个数字都可以更新为:

\[A_x=\min_{i=1}^{n} \{ A_i+|x-i| \} \]

这样直接从左到右和从右到左分别递推一次即可。
最后两端的石子相当于最左和最右各有一堆高度为0的石子,递推的时候处理就可以了,答案就是所有数字的最大值。
复杂度\(O(n)\)

【51Nod】1519 拆方块 贪心+递推

原文:https://www.cnblogs.com/onioncyc/p/9082442.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!