码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:从右到左   math   tps   处理   整数   传递   splay   www   递推   

【题目】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 拆方块 贪心+递推

标签:从右到左   math   tps   处理   整数   传递   splay   www   递推   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!