码迷,mamicode.com
首页 > 其他好文 > 详细

luogu1969 积木大赛

时间:2018-05-28 22:42:50      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:ret   搭建   一段   AC   扫描   class   区间   cst   cstring   

题目大意

搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi。
在搭建开始之前,没有任何积木(可以看成n块高度为 0 的积木)。接下来每次操作,可以选择一段连续区间[l, r],然后将第 L 块到第 R 块之间(含第 L 块和第 R 块)所有积木的高度分别增加1。求操作的最小次数。

思路

题目可以看成给定几个大厦,问题至少要砍几刀才能把大厦砍没。我们思路不在于砍的过程,而在于何时会多砍。从左往右扫描,当山势(当前大厦与前一个大厦高度差)变低时,砍的刀数不增加,因为要砍掉前一个大厦必然会要砍到与当前大厦同一层的位置,砍前一个大厦时砍深一点即可。当山势变高时,你不得不多砍几刀才能把多出的一块砍掉。

#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
    int n, ans = 0, curH, prevH = 0;
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &curH);
        if(curH > prevH)
            ans += (curH - prevH);
        prevH = curH;
    }
    printf("%d\n", ans);
    return 0;
}

luogu1969 积木大赛

标签:ret   搭建   一段   AC   扫描   class   区间   cst   cstring   

原文地址:https://www.cnblogs.com/headboy2002/p/9102417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!