• [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
    ",ans);
    33     return 0; 
    34 }
  • 相关阅读:
    js创建map
    [POJ 1911] 棋盘
    [POJ 2176] Folding
    [POJ 1014] Dividing
    [洛谷P3486]POI2009 KON-Ticket Inspector
    [洛谷P1131] ZJOI2007 时态同步
    [洛谷P1133] 教主的花园
    [洛谷P1095]NOIP2007 普及组T3 守望者的逃离
    [POJ1187] 陨石的秘密
    [POJ1772] Substract
  • 原文地址:https://www.cnblogs.com/GldHkkowo/p/8915071.html
Copyright © 2020-2023  润新知