蓝桥杯---积木大赛

  • 题目:

问题描述

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

输入格式

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

输出格式

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

样例输入

5
2 3 4 1 2

样例输出

5

  • 题目解释:

    • 这道题意思是建造一个宽为n的大厦,这个宽为n是由n个宽为1的积木构成,然后要从高度为0开始搭建出高度为hi(就是题目所给的各块积木的高度)为止。
    • 然后我们要求的是最小的操作次数(意思就是要放多少次积木才能达到题目所给的各高度),每一次操作可以在一个连续的区间内同时放上积木。
    • 从题目给出的样例,就是开始时宽度为1道宽度为5的积木高度全为0。
    • 然后第一次从1-5同时放入1块积木,是他们高度均为1,即hi=[1,1,1,1,1]
    • 然后第二次,由于宽度为4已经达到了高度要求,所以第二次增高的连续区间只能是宽度为1-宽度为3均增加一块积木(高度+1),即hi=[2,2,2,1,1]
    • 第三次,宽为1的积木已到达高度,然后对宽为2-宽为3的积木+1,即hi=[2,3,3,1,1]
    • 第四次只对宽为3处的积木高度+1(因为已经没有连续区间可以同时叠加了),第五次就只对宽度为5处的积木高度+1,最后即hi=[2,3,4,1,2]
    • 所以最后是操作5次。
  • 思路:

    • 按照上方的解释,其实就是后一块积木比前一块积木高多少,就加几次。
    • 因为前一块积木再加高度时后面的积木跟着加,然后后面的比前面的高多少,后面的自己就补多少高度。
  • 代码:

package BlueBridge;

import java.util.Scanner;

public class BuildingBlockContest {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n+1];
        for (int i = 1; i < nums.length; i++) {
            nums[i] = in.nextInt();
        }
        int sum = 0;
        for (int i = 1; i < nums.length; i++) {
            if(nums[i]>nums[i-1])
                sum = nums[i]-nums[i-1]+sum;
        }
        System.out.println(sum);
        in.close();
    }
}

 (有错误欢迎指正哈,如果有不小心侵权的联系删除哈😁) 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值