积木大赛
来源:互联网 发布:p2p数据分析 编辑:程序博客网 时间:2024/04/28 17:12
Description
积木大赛
(block.pas/c/cpp)
【问题描述】
春春幼儿园举办了一年一度的“积木大赛”。
在2013年NOIP大赛中,平平同学己经搭建了宽度为n的大厦,其中第i块高度为hi。今年比赛的内容是对其NOIP2013搭建大厦进行扩建,使用的材料也都是体积为1正方体积木。
今年搭建的规则是:如果要在某一个位置上放一个积木,必须满足它的左下、下方、右下都有积木(用二维坐标a表示,如果要在a[i,j]位置放积木,那么a[i-1,j-1]、a[i,j-1]、a[i+1,j-1]必须要有积木)。
如果搭的积木大厦越高,平平同学就会觉得越舒服,现有m个积木,问你能搭建的最大高度是多少?
【输入】
第一行两个用空格隔开的整数n和m,分别表示己搭好的宽度和可以使用的积木数量。
后面有n行,每行一个整数hi表示己搭建的第i列积木的高度。
【输出】
一个整数,表示能搭建的最大高度。
【输入输出样例】
样例1
样例2
block.in
block.out
block.in
block.out
8 4
3
4
2
1
3
3
2
4
5
3 100
3
3
3
4
【数据说明】
30%的数据满足:n<=10;m<=1000。
50%的数据满足:n<=100;m<=1000,000。
70%的数据满足:n<=1000;m<=10,000,000。
80%的数据满足:n<=10,000;m<=100,000,000。
100%的数据满足:n<=100,000;m<=1000,000,000, 1≤hi≤10^9。
算法一:对于50%的数据:
①从高到低枚举每一个高度看是否能达到, 时间复杂度O(n);
②对于每一个高度,枚举最高点在哪一列,时间复杂度O(n);
③从当前枚举的最高列往两边递减判断是否合法,时间复杂度O(n);
总时间复杂度O(n3)。(Hint: 实测暴力能拿75分, 根本就不用二分…)
算法二:对于70%的数据:
在算法一中的第二步求高度时,使用二分答案,时间复杂度降为O(logn)。总时间复杂度为O(n2logn)。
算法三:100%的数据:
对于第二步和第三步,根据单调性,我们用L[i]表示在高度为H时第I列达到高度H时最左端的位置,R[i]为最右端的位置。通过O(n)的时间得到L,R,总的时间复杂度为O(nlogn)
Hint: 单调队列维护, 实际上就是利用斜率. 和单调队列优化DP差不多.
- 积木大赛
- 积木大赛
- 积木大赛
- wikioi3288 积木大赛
- vijos P1844积木大赛
- [NOIP2013]积木大赛
- NOIP2013 积木大赛
- p2083 noip2013T4 积木大赛
- 洛谷 P1969 积木大赛
- NOIP 1969 积木大赛
- NOIP2013 D2T1 积木大赛
- noip2013 积木大赛
- [NOIP 2013] 积木大赛
- vijos P1844积木大赛
- noip2013积木大赛
- 洛谷 P1969 积木大赛
- [noip2013tg] 积木大赛
- P1969 积木大赛
- codeforces 725F. Family Photos&&CQBZOJ 3268: 取相片
- 真的,关于深度学习与计算机视觉,看这一篇就够了
- 2016/11/15学习工作日志
- Linux 下挂载新硬盘
- Log4Net使用注意事项
- 积木大赛
- 设计模式-策略模式(Java)
- 安卓webview下使用zepto的swipe碰到的坑
- 阶层
- NOIP考前总结
- string
- centos配置163邮箱发送
- CSS3颜色值RGBA与渐变色
- Spark 基于pyspark下的实时日志分析