博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【51Nod】1519 拆方块 贪心+递推
阅读量:7200 次
发布时间:2019-06-29

本文共 411 字,大约阅读时间需要 1 分钟。

【题目】

【题意】给定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)\)

转载于:https://www.cnblogs.com/onioncyc/p/9082442.html

你可能感兴趣的文章
Linux运维学习历程-第十四天-磁盘管理(一)磁盘分区表类型与文件系统
查看>>
2016年4月20日作业
查看>>
4、Ansible配置和使用
查看>>
如何设计EDM邮件内容
查看>>
java_类型转换(转)
查看>>
EMC 存储 故障转移模式(Failover Mode)简介
查看>>
解决iis服务器 Server Application Error
查看>>
MySQL5.7杀手级新特性:GTID原理与实战
查看>>
typeahead自动补全插件的limit参数问题
查看>>
关于foreach总是报错invalid param等问题
查看>>
bash快捷方式
查看>>
php DOC类型注释的用法
查看>>
浏览器兼容问题踩坑收集
查看>>
H5视频推流方案
查看>>
【BZOJ】3998: [TJOI2015]弦论
查看>>
【CodeForces】698 C. LRU
查看>>
波浪刻度电池View
查看>>
转 网络编程学习笔记一:Socket编程
查看>>
HSTS VS 301 redirect
查看>>
第七周作业
查看>>