题目描述

春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi。

在搭建开始之前,没有任何积木(可以看成n块高度为 0 的积木)。接下来每次操作,小朋友们可以选择一段连续区间[l, r],然后将第第 L 块到第 R 块之间(含第 L 块和第 R 块)所有积木的高度分别增加1。

小 M 是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。

输入输出格式

输入格式:

输入文件为 block.in

输入包含两行,第一行包含一个整数n,表示大厦的宽度。

第二行包含n个整数,第i个整数为hi 。

输出格式:

输出文件为 block.out

仅一行,即建造所需的最少操作数。

输入输出样例

输入样例#1:

5
2 3 4 1 2
输出样例#1:

5

说明

【样例解释】

其中一种可行的最佳方案,依次选择

[1,5] [1,3] [2,3] [3,3] [5,5]

【数据范围】

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

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

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

思路:

  因为必须是连续的区间,所以若该点上是有积木的,要么他是区间的左端点(当上一个的该处没有积木的时候),要么就是被某段区间加上来的

  所以只需要比较当前点是否比上一个点的积木多即可,如果多就加上他们的差并且更新last,如果少就直接更新last。

上代码:

#include <iostream>
#include <cstdio>
using namespace std; int main() {
int n,last=,ans=;
scanf("%d",&n);
for(int i=,now; i<=n; i++) {
scanf("%d",&now);
if(now>last) ans+=(now-last);
last=now;
}
printf("%d",ans);
return ;
}

最新文章

  1. JavaScript中的静态成员
  2. 拯救你的文档 – 【DevOps敏捷开发动手实验】开源文档发布
  3. [阅读笔记]Software optimization resources
  4. Nancy 学习-自宿主 继续跨平台
  5. 斯诺登称NSA攻破互联网加密技术
  6. 【Redis】Redis分布式集群几点说道
  7. Lamp环境的详细安装教程
  8. android webview乱码问题
  9. 1090-Rock, Paper, Scissors
  10. dtrace-oracle-vage :吕海波
  11. POJ-2240
  12. A Byte of Python (1)安装和运行
  13. 单服务器防护linux iptables脚本
  14. Hdu 5595 GTW likes math
  15. ora-01033 oracle initialization or
  16. sourceTree 代码冲突解决
  17. ASP.NET Core 项目简单实现身份验证及鉴权
  18. 利用HBuilder将vue项目打包成移动端app
  19. 部署WEB项目到服务器(三)安装mysql到linux服务器(Ubuntu)详解
  20. ios MQTT协议的实际应用

热门文章

  1. SAS学习笔记34 指针控制
  2. linux下通过vim编辑文件的方法
  3. HTML 禁止复制文字
  4. (十五)struts2之注解
  5. ASP.NET 使用 SyndicationFeed 输出 Rss
  6. 十三、Vue中的computed属性
  7. Https的作用
  8. Servlet实现图片文件上传
  9. leetcode-104.二叉树最大深度 &#183; BTree + 递归
  10. Linux磁盘管理——swap分区