51Nod1519 拆方块 贪心+递推
Posted ONION_CYC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51Nod1519 拆方块 贪心+递推相关的知识,希望对你有一定的参考价值。
【题目】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)\)。
以上是关于51Nod1519 拆方块 贪心+递推的主要内容,如果未能解决你的问题,请参考以下文章