`
Simone_chou
  • 浏览: 196224 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Painting Fence(分治)

    博客分类:
  • CF
 
阅读更多
C. Painting Fence
time limit per test
1 second
memory limit per test
512 megabytes
input
standard input
output
standard output

Bizon the Champion isn't just attentive, he also is very hardworking.

Bizon the Champion decided to paint his old fence his favorite color, orange. The fence is represented as n vertical planks, put in a row. Adjacent planks have no gap between them. The planks are numbered from the left to the right starting from one, the i-th plank has the width of 1 meter and the height of ai meters.

Bizon the Champion bought a brush in the shop, the brush's width is 1 meter. He can make vertical and horizontal strokes with the brush. During a stroke the brush's full surface must touch the fence at all the time (see the samples for the better understanding). What minimum number of strokes should Bizon the Champion do to fully paint the fence? Note that you are allowed to paint the same area of the fence multiple times.

Input

The first line contains integer n (1 ≤ n ≤ 5000) — the number of fence planks. The second line contains n space-separated integersa1, a2, ..., an (1 ≤ ai ≤ 109).

Output

Print a single integer — the minimum number of strokes needed to paint the whole fence.

Sample test(s)
input
5
2 2 1 2 1
output
3
input
2
2 2
output
2
input
1
5
output
1
Note

In the first sample you need to paint the fence in three strokes with the brush: the first stroke goes on height 1 horizontally along all the planks. The second stroke goes on height 2 horizontally and paints the first and second planks and the third stroke (it can be horizontal and vertical) finishes painting the fourth plank.

In the second sample you can paint the fence with two strokes, either two horizontal or two vertical strokes.

In the third sample there is only one plank that can be painted using a single vertical stroke.

 

       题意:

       给出 n(0 ~ 5000),后给出 n 个数(1 ~ 10 ^ 9),代表有 n 块板,每块板 长为 ai,宽为 1,全部板并排打竖放着,现有一个刷子宽 1,可以一次性打横扫或者打竖扫,扫的时候不能有间隔,问最少扫多少次能将所有板都扫一遍。

 

       思路:

       分治法。整体来看,有两种方法,要不全部都打竖扫一遍,要不把共同最小值打横扫一遍 + 剩余不连续块的最小扫描数。而求剩余不连续块的最小扫描数的时候也同样也是运用这样的方法,故可以运用递归求解,当剩余 1 X ai 的时候则返回 1。

 

       AC:

       递归函数传过去的是左右区间边界,还有上一次所减去的最小值数 k 。所以下一次迭代求最小值的时候,要减去上一次的最小值 k,同时比较的时候也是这样。传下下次迭代的时候,最小值要加上上一次的最小值。注意这些就没有问题了。

#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int MAX = 1000000005;

int num[5005];

int solve(int l, int r, int k) {
        int Min = MAX;

        if (l == r) return 1;

        for (int i = l; i <= r; ++i) {
                Min = min(Min, num[i] - k);
        }

        int ans = 0;
        for (int i = l; i <= r; ++i) {
                if (num[i] - k > Min) {
                        int ll = i, rr = i + 1;

                        while (rr <= r && num[rr] - k > Min) ++rr;
                        --rr;

                        ans += solve(ll, rr, Min + k);
                        i = rr + 1;
                }
        }

        return min(r - l + 1, Min + ans);
}

int main() {

        int n;
        scanf("%d", &n);

        for (int i = 1; i <= n; ++i)
                scanf("%d", &num[i]);

        printf("%d\n", solve(1, n, 0));

        return 0;
}

 

分享到:
评论

相关推荐

    算法解析ACM

    **案例分析:Pku1691—Painting A Board** 题目描述:给定一个长条木板和几种颜色,需要将木板涂色,使得相邻的两段颜色不同。此类问题可以通过动态规划来解决,通过构建一个二维数组来存储每个位置的最佳涂色方案...

    数分1.11Tableau安装及使用教程

    数分1.11Tableau安装及使用教程

    软考信息系统运行管理员:涵盖信息系统运维、安全、架构及技术标准的多维考核

    内容概要:本文主要围绕着计算机信息系统运行管理员考试展开讨论,详细介绍了有关信息系统在运维中的各种问题及其应对方案。具体而言,文中不仅列举出了不同类型的信息系统对其本身的要求,而且还深入探讨了运维管理中面临的挑战和技术手段。另外,文章特别提及了一些特定类型的系统(例如政府系统和财务管理等),并指明在面对它们时需要考虑的安全级别、稳定性等关键要素;同时也强调了良好的文档管理和合理的设施运维对象划分,以及软硬件的选择与维护。同时文章还讲解了多种工具的作用(比如Nagios),以及硬件如计算机机房和UPS的具体规格和要求;并且讲述了关于变更管理和发布管理等的概念与实际应用场景。此外,在最后一部分内容里也谈到了云架构及其各个构成部分。 适用人群:本文适合即将参加软考信息运行管理员认证的专业人士,也适用于希望深入了解信息系统运作、管理和维护的技术从业者和相关领域的管理人员。 使用场景及目标:本资料旨在辅助考生掌握信息系统的高效、稳健地构建与运营所需的知识和技术,帮助他们顺利通过软考的同时提升实战经验;同时也为企业信息化建设提供了宝贵的理论基础和实践指南。 其他说明:虽然本文聚焦于特定职业资格证书

    伪知识图谱:元路径引导检索与图内文本技术,助力RAG增强型LLM

    大型语言模型(LLMs)的出现彻底改变了自然语言处理。然而,这些模型在从大量数据集中检索精确信息时面临挑战。检索增强生成(RAG)旨在通过结合外部信息检索系统来增强LLMs,从而提高响应的准确性和上下文性。尽管有所改进,RAG在高容量、低信息密度数据库中的全面检索仍然存在困难,并且缺乏关系意识,导致答案碎片化。 为了解决这一问题,本文介绍了伪知识图谱(PKG)框架,该框架通过集成元路径检索、图内文本和向量检索到LLMs中,旨在克服这些限制。通过保留自然语言文本并利用各种检索技术,PKG提供了更丰富的知识表示并提高了信息检索的准确性。使用Open Compass和MultiHop-RAG基准进行的广泛评估表明,该框架在管理和处理大量数据及复杂关系方面具有有效性。

    zedr_clean-code-python_1741402803.zip

    python学习教程

    kibana-7.10.2 docker镜像压缩包,百度网盘

    请到网盘中自取压缩包,此包为kibana-7.10.2 镜像压缩包,是通过现有镜像导出来的,主要是为了解决有些机器无法连接外网,导致无法下载镜像 加载镜像: docker load -i kibana-7.10.2.tar 查看镜像: docker images 备注:elk此镜像配套资源,相同版本的elasticsearch和logstash,请在我的资源中搜索其他镜像

    UniApp开发一个简单的记事本应用文字教程

    UniApp开发一个简单的记事本应用文字教程

    基于Andorid的音乐播放器项目设计(QQ音乐).zip

    基于Andorid的音乐播放器项目设计(QQ音乐)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。

    编程语言_Python_Cookbook_管理工具_1741398354.zip

    python学习资源

    React Developer Tools在谷歌拓展的应用商城下载不了任何解决

    React Developer Tools在谷歌拓展的应用商城下载不了任何解决

    【毕业设计-java】springboot-vue健身房管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计-java】springboot-vue健身房管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    网络通信_批量IP管理_远程命令执行_工具_1741401998.zip

    python学习资源

    在Anaconda中创建和配置PyTorch环境的详细步骤

    本文提供了一套完整的指南,帮助用户在Anaconda中配置PyTorch环境,便于深度学习开发。首先,用户需要确保安装Anaconda,并通过Anaconda Prompt创建一个新的虚拟环境,以隔离项目依赖。创建好环境后,用户可以根据所用操作系统以及CUDA版本,选择适合的安装命令。对于Windows和Linux用户,提供了安装PyTorch、TorchVision和TorchAudio的具体命令,包括CUDA Toolkit的版本选择。macOS用户则可以安装仅支持CPU的版本。安装完成后,通过简单的Python代码验证PyTorch是否成功安装以及GPU的可用性。文中还列出了常见问题及解决方法,帮助用户快速排查安装过程中可能遇到的障碍。通过遵循这些步骤,用户可以顺利搭建起一个专属的PyTorch开发环境,提升深度学习的工作效率和体验。

    药品同步线程池模式_自动超时退出机制_1741403804.zip

    python学习教程

    数据结构学习指南:从资源到实战全方位提升编程技能

    内容概要:本文汇总了学习数据结构的相关资源,旨在帮助读者系统化地理解和掌握这一计算机科学的基础概念。文中首先列举了一系列权威在线学习资源,包括知名教授的主页、在线编程平台LeetCode和技术博客,这些资源不仅理论丰富,还提供大量的实例和练习机会。接着推荐了几本经典的书籍,如《算法导论》、《大话数据结构》,适合不同程度的学习者深入理解算法和数据结构的细节。此外,还特别提及了几门高质量的网络课程,能够为初学者提供清晰的学习路径。最后强调通过动手实践,如动态数组的C语言实现以及算法题目的刷题练习,是提高编程技能的有效途径。 适合人群:对于想要系统学习并掌握数据结构的程序员及爱好者。 使用场景及目标:适用于个人自学或者课堂教学,目的是通过综合使用理论学习、实践操作来达到对数据结构和算法有全面深刻的认识。 其他说明:本文提供了丰富的链接,让读者可以直接访问各个优质教育资源进行深度探究,鼓励大家积极参与讨论,相互分享心得体验,形成良好的互动交流氛围。

    QMI8658 Datasheet

    QMI8658 Datasheet

    【毕业设计】java-springboot-vue火车订票管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计】java-springboot-vue火车订票管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    Screenshot_2025-03-10-22-52-22-034_com.miui.notes.jpg

    Screenshot_2025-03-10-22-52-22-034_com.miui.notes.jpg

    面试基础知识_Python实现_编程语言_数据结构_1741403581.zip

    python学习教程

Global site tag (gtag.js) - Google Analytics