It is the path you have chosen. Take pride in it. Kotomine Kirei

GldHkkowo

[NOIP2013]积木大赛

积木大赛

题目描述

    春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi。 
    在搭建开始之前,没有任何积木(可以看成n块高度为0 的积木)。接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第L块到第R块之间(含第L块和第R块)所有积木的高度分别增加1。 
    小M是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。

输入

输入文件为block.in
输入包含两行,第一行包含一个整数n,表示大厦的宽度。
第二行包含n个整数,第i个整数为hi

输出

输出文件为block.out
仅一行,即建造所需的最少操作数。

 

样例输入

5 
2 3 4 1 2 

样例输出

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。 

 

 

如果hi < h(i-1) 就加上差值,最后的差值之和就是ans

代码:

 1 #include<cstdio>
 2 
 3 inline int read(){
 4     int x = 0, f = 1; 
 5     char ch = getchar(); 
 6     while (ch < '0' || ch > '9') {
 7         if (ch == '-') {
 8             f = -1; 
 9         }
10         ch = getchar(); 
11     }
12     while (ch >= '0' && ch <= '9') {
13         x = x * 10 + ch - '0'; 
14         ch = getchar(); 
15     }
16     return x * f; 
17 }
18 
19 int main(){
20     int n, tp, pre = 0, ans = 0; 
21     n = read(); 
22     for (int i = 1; i <= n; i++) {
23         tp = read(); 
24         if (tp >= pre) {
25             ans += tp - pre;
26             pre = tp;
27         }
28         else {
29             pre = tp; 
30         }
31     }
32     printf("%d\n",ans);
33     return 0; 
34 }

 

posted on 2018-04-23 07:38  GldHkkowo  阅读(134)  评论(0编辑  收藏  举报

导航