CCF CSP 201312-3 第三题 最大的矩形


CCF CSP 201312-3 第三题 最大的矩形

问题描述

  在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。

请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。

输入格式

  第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。
  第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。

输出格式

  输出一行,包含一个整数,即给定直方图内的最大矩形的面积。

样例输入

6
3 1 6 5 2 3

样例输出

10

解题思路

我是用穷举法做的,思路就是确定从第i个到第j个矩形面积的求法:宽度就是两个数相减然后加一,然后高度就是最低的高度,相乘就是结果,然后嵌套两个for循环就可以全部遍历全部情况,找出其中最大的面积就是结果。

代码

求面积函数

/*
    找到输入数据中从start到end的最大面积
    算法:
    开始到最后的距离为宽度,
    从开始到最后的最低值为高度,
    相乘就可以得出结果
     */
    public static int getArea(int[] list,int start,int end){
        int hight = list[start];
        int width = end-start+1;
        int temp = list[start];
        for (int i=start+1;i<=end;i++){
            /*
            找到最小值
             */
            temp = list[i];
            if (temp<hight)
                hight=temp;
        }
        return hight*width;
    }

主函数

public static void main(String[] args) {
        /*读入数据*/
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        int[] list = new int[number];
        for (int t=0;t<number;t++){
            list[t]=sc.nextInt();
        }
        /*最大面积*/
        int maxArea = 0;
        for (int i=0; i<number;i++){
            for (int j=i;j<number;j++){
                int area= getArea(list,i,j);
                if (area>maxArea){
                    maxArea=area;
                }
            }
        }
        /*输出结果*/
        System.out.println(maxArea);
}

将上面两个函数入主类就可以100分通过

总结

这道题暴力法主要是考察计算面积的过程和穷举的思路。其他思路后续有时间再更新。


文章作者: Cyber-Peng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-ND 4.0 许可协议。转载请注明来源 Cyber-Peng !
 上一篇
CCF CSP 201312-4 有趣的数 CCF CSP 201312-4 有趣的数
CCF CSP 201312-4 有趣的数问题描述我们把一个数称为有趣的,当且仅当: 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 最高位数字不为0
2020-02-27
下一篇 
CCF CSP 201312-2:ISBN号码 CCF CSP 201312-2:ISBN号码
CCF CSP 2013年第二题:ISBN号码问题问题描述  每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号
2020-02-25
  目录