zoukankan      html  css  js  c++  java
  • CCF-201312-3-最大的矩形

    问题描述

    试题编号: 201312-3
    试题名称: 最大的矩形
    时间限制: 1.0s
    内存限制: 256.0MB
    问题描述:
    问题描述
      在横轴上放了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
    解题思路:

    从单个向两边搜索,比原来大的就+1,小的就停止

    计算出以当前柱子为中心的面积之后与最终的结果取大值赋值给最终的结果




    源代码:

    <pre name="code" class="cpp">#include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<cstring>
    #include<string>
    using namespace std;
    int main()
    {
    	int n;
    	int ans[1005];
    	int res;
    	scanf("%d",&n);
    	memset(ans,0,sizeof(ans));
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&ans[i]);
    	}
    	res=0;
    	for(int i=1;i<=n;i++)
    	{
    		int cntl,cntr;
    		cntl=0;
    		cntr=0;
    		int pl,pr;
    		pl=i-1;
    		pr=i+1;
    		while(ans[pl]>=ans[i])
    		{
    			cntl++;
    			pl--;
    		}
    		while(ans[pr]>=ans[i])
    		{
    			cntr++;
    			pr++;
    		}
    		res=(cntl+cntr+1)*ans[i]>res?(cntl+cntr+1)*ans[i]:res;
    	}
    	printf("%d
    ",res);
    	return 0;
    }


    
       
    
    
  • 相关阅读:
    asp.net 2.0 国际化 动态切换语言
    SKU、UPC、EAN和ISBN
    NCalc:处理数学运算的好帮手
    yaf 论坛安装
    Afterlogic xmail 邮局软件不能收email 设置
    要围着中心来做事
    保证Winform程序只有一个实例在运行
    可视热敏读写卡开发
    jQuery CSS 效果
    代碼小片斷
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776069.html
Copyright © 2011-2022 走看看