P5019 [NOIP2018 提高组] 铺设道路(贪心算法)

简介: P5019 [NOIP2018 提高组] 铺设道路(贪心算法)

题目描述



春春是一名道路工程师,负责铺设一条长度为 n 的道路。


铺设道路的主要工作是填平下陷的地表。整段道路可以看作是  n 块首尾相连的区域,一开始,第 ii 块区域下陷的深度为  di 。


春春每天可以选择一段连续区间 [L,R] ,填充这段区间中的每块区域,让其下陷深度减少 1 。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为  0 。


春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为  0 。


输入格式



输入文件包含两行,第一行包含一个整数  n,表示道路的长度。 第二行包含 n  个整数,相邻两数间用一个空格隔开,第i  个整数为  di 。


输出格式



输出文件仅包含一个整数,即最少需要多少天才能完成任务。


输入输出样例



输入 #1复制

6  

4 3 2 5 3 5


输出 #1复制

9


说明/提示



【样例解释】

一种可行的最佳方案是,依次选择: [1,6][1,6]、[1,6][1,6]、[1,2][1,2]、[1,1][1,1]、[4,6][4,6]、[4,4][4,4]、[4,4][4,4]、[6,6][6,6]、[6,6][6,6]。


【数据规模与约定】


对于   30% 的数据,1 ≤ n ≤ 10 ;

对于   70% 的数据,1 ≤ n ≤ 1000  ;

对于   100% 的数据, 1≤n≤100000,0≤di≤10000 。


题意分析;


若部分1深度>部分2深度,就有步数=部分1深度

若部分2深度>部分1深度,就有步数=部分2深度

所以不难推出(部分0深度=0):

当当前部分深度<前一部分深度,总步数不变

当当前部分深度>前一部分深度,总步数=总步数+当前部分深度-前一部分深度


代码实现:

#include<iostream>
#include<cstdio>
using namespace std;
int n,ans=0,l=0;
int main()
{
    scanf("%d",&n);
    for(int a=1;a<=n;a++)
    {
        int p;
        scanf("%d",&p);//当前深度
        if(p>l)//如果当前深度大于前一段深度
        {
            ans=ans+p-l;//总步数加当前深度减前一段深度
        }
        l=p;//前一段深度;
    }
    printf("%d\n",ans);
}


相关文章
|
机器学习/深度学习 人工智能 网络架构
P1563 [NOIP2016 提高组] 玩具谜题(找规律,心要细,数学思维)
P1563 [NOIP2016 提高组] 玩具谜题(找规律,心要细,数学思维)
73 0
|
6月前
[NOIP2002]过河卒 标准递归
[NOIP2002]过河卒 标准递归
41 6
|
6月前
|
C++
【洛谷 P1047】[NOIP2005 普及组] 校门外的树 题解(位集合)
**NOIP2005普及组问题:**给定长度为$l$的马路,上面等距种植着树,需移除位于建造地铁区域的树。输入包含马路长度和区域数,以及各区域起止点,输出移树后剩余树的数量。样例输入:$l=500$, $m=3$,输出:$298$。$20\%$数据无区域重合,$1 \leq l \leq 10^4$,$1 \leq m \leq 100$。解决方案利用位集合(bitset)表示树的状态,遍历区域将树设为0,最后统计1的数量。AC代码使用C++实现。
31 0
|
6月前
|
C++
【洛谷 P1042】[NOIP2003 普及组] 乒乓球 题解(模拟+向量)
`NOIP2003`普及组编程题:乒乓球比赛模拟。给定一系列球赛记录(WL序列),程序需按11分和21分制分析比分。输入含多个字符串,含W(华华得分)、L(对手得分)和E(结束标记)。输出每局比分,分制间空行间隔。样例:`WWWWWW...` → `11:0\n11:0\n1:1`(11分制)和`21:0\n2:1`(21分制)。代码使用C++,逐字符读取,当分差≥2且得分≥x时输出比分。
63 0
|
7月前
|
测试技术
消除游戏(第十三届蓝桥杯省赛C++C组 , 第十三届蓝桥杯省赛PythonA/B/研究生组)
消除游戏(第十三届蓝桥杯省赛C++C组 , 第十三届蓝桥杯省赛PythonA/B/研究生组)
消除游戏(第十三届蓝桥杯省赛C++C组 , 第十三届蓝桥杯省赛PythonA/B/研究生组)
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
57 0
|
C++
第七届蓝桥杯省赛 C++ A/B组 - 四平方和
第七届蓝桥杯省赛 C++ A/B组 - 四平方和
98 0
|
测试技术 C++
第十二届蓝桥杯省赛 C++ B组 - 砝码称重
第十二届蓝桥杯省赛 C++ B组 - 砝码称重
125 0
|
C++
第十二届蓝桥杯省赛第二场 C++ B组 - 小平方
第十二届蓝桥杯省赛第二场 C++ B组 - 小平方
67 0
|
算法
【递归与递推】洛谷[NOIP2002 普及组] 过河卒
前言 本题来自洛谷P1002. 题目链接:[NOIP2002 普及组] 过河卒 - 洛谷
227 0