题目:http://acm.hdu.edu.cn/showproblem.php?pid=1506

刚开始没考虑时间复杂度,直接敲了,直接tle了,之后没有思路,然后看题解,看见大神写的优化非常棒。

大神的解释:(其实对于w[i]来说,如果去求后面连续的值,完全没必要一个个去比对,直接看w[i-1]的值就行了。

比如说2、3、4、5这个序列,如果我们要看3往后能延伸多长,并不需要去逐个和4和5比较,在计算4的时候,我们已经计算过5是比4大的,因为3比4小,4所能往后延伸的长度,3也一定能达到(4能延伸的长度内的数据都大于等于4,当然也都比3大),我们可以直接比较在4达到的最终长度的末端之后的值。(dp进行记录)

这道题计算的时候进制转换也需要特别注意,如果temp没有强制转换成__int64位,提交会wa。注意强制转换啊,否则wa.)

这道题优化的思路非常巧妙,很值得学习。

DP 找出 a[i] 的左边(l[i])和右边(r[i])与自己连着的比自己大的数的长度 , 然后用这个长度乘以 a[i], 乘积最大的那个就是答案 .

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#define inf 0x3f3f3f3f
typedef __int64 ll;
using namespace std;
int n,w[],l[],r[];
int main()
{
ll maxx,zan;
while(scanf("%d",&n)!=EOF&&n!=)
{
for(int i=;i<=n;i++)
{
scanf("%d",&w[i]);
l[i]=r[i]=i;
}
for(int i=;i<=n;i++)
{
while(l[i]>&&w[l[i]-]>=w[i])
{
l[i]=l[l[i]-];
}
}
for(int i=n-;i>=;i--)
{
r[i]=i;
while(r[i]<n&&w[r[i]+]>=w[i])
{
r[i]=r[r[i]+];
}
}
maxx=-inf;
for(int i=;i<=n;i++)
{
zan=(ll)(r[i]-l[i]+)*w[i];//以前一直对变量的存储有个错误的了解,如果(r[i]-l[i]+1)*w[i]
maxx=max(maxx,zan);//如果不强制转换的话,则会wa,以后做题注意
}
printf("%I64d\n",maxx);
}
return ;
}

tle的水代码。

include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#define inf 0x3f3f3f3f
typedef __int64 ll;
using namespace std;
int n,w[];
ll dp[];
int main()
{
int minx;
ll maxx,zan;
while(scanf("%d",&n)!=EOF&&n!=)
{
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
memset(dp,,sizeof(dp));
dp[]=w[];
maxx=w[];
for(int i=;i<=n;i++)
{
minx=w[i];
for(int j=i-;j>=;j--)
{
minx=min(minx,w[j]);
zan=(i-j+)*minx;
dp[i]=max(dp[i],zan);
}
maxx=max(maxx,dp[i]);
}
printf("%I64d\n",maxx);
}
return ;

HDU1506: Largest Rectangle in a Histogram(最大子矩阵,好题动态优化左右边界)的更多相关文章

  1. NYOJ-258/POJ-2559/HDU-1506 Largest Rectangle in a Histogram,最大长方形,dp或者单调队列!

                                         Largest Rectangle in a Histogram 这么经典的题硬是等今天碰到了原题现场懵逼两小时才会去补题.. ...

  2. hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  3. hdu1506——Largest Rectangle in a Histogram

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  4. hdu1506 Largest Rectangle in a Histogram

    Problem Description A histogram is a polygon composed of a sequence of rectangles aligned at a commo ...

  5. Largest Rectangle in a Histogram (最大子矩阵)

    hdu 1506 A histogram is a polygon composed of a sequence of rectangles aligned at a common base line ...

  6. HDU1506 Largest Rectangle in a Histogram (动规)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  7. 【题解】hdu1506 Largest Rectangle in a Histogram

    目录 题目 思路 \(Code\) 题目 Largest Rectangle in a Histogram 思路 单调栈. 不知道怎么描述所以用样例讲一下. 7 2 1 4 5 1 3 3 最大矩形的 ...

  8. HDU-1506 Largest Rectangle in a Histogram【单调栈】

    Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base l ...

  9. HDU1506 ( Largest Rectangle in a Histogram ) [dp]

    近期情绪太不稳定了.可能是由于在找实习这个过程碰壁了吧.第一次面试就跪了,可能是我面的是一个新公司,制度不完好,我感觉整个面试过程全然不沾编程,我面试的还是软件开发-后来我同学面试的时候.说是有一道数 ...

随机推荐

  1. 设置MATLAB中Current Folder的默认文件夹(转载)

    设置MATLAB中Current Folder的默认文件夹 在我们使用MATLAB的过程中,其Current Folder面板会给我们带来一定的便利性.但遗憾的是,MATLAB自身没有提供友好的设置界 ...

  2. Solr学习02:搭建Solr环境

    一.安装虚拟机 Solr 必须运行在Java1.6 或更高版本的Java 虚拟机中,运行标准Solr 服务只需要安装JRE 即可,但如果需要扩展功能或编译源码则需要下载JDK 来完成.可以通过下面的地 ...

  3. spring 的redis操作类RedisTemplate

    spring 集成的redis操作几乎都在RedisTemplate内了. 已spring boot为例, 再properties属性文件内配置好 redis的参数 spring.redis.host ...

  4. sql把varchar转化为int型

    select Max(convert(int,id))from member_Info;

  5. String.Join

    在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串.(来源于MSDN) 有两个重载函数:[C#]public static string Join(   ...

  6. SmartUI2.0后续声明

    感谢很多朋友关注,因为今年一直在另外一个公司做顾问,网络环境管制相当严格,所以一直没有更新博客. 同时也很抱歉,SmartUI 2.0一直都没有下文.在次声明一下,SmartUI一直都在做,只不过Sm ...

  7. git & github 菜鸟笔记

    1.概念: 最先进的分布式版本控制系统 文件修改该提交的内容:---版本 文件名 用户 说明 日期 GitHub网站上线了,它为开源项目免费提供Git存储 --CVS及SVN都是集中式的版本控制系统, ...

  8. CSS:层叠样式表的冲突处理

    前言 重叠样式表的冲突是通过重叠过程排序,最终确定文档的显示方式的,也就是是说通过重叠排序来处理冲突问题.这过程起决定性作用的是选择器及其相关申明的特殊性,以及继承机制. 基本流程 1.找出所有相关规 ...

  9. 【BZOJ4641】基因改造 KMP

    [BZOJ4641]基因改造 Description "人类智慧的冰峰,只有萌萌哒的我寂寞地守望." --TB TB正走在改造人类智慧基因的路上.TB发现人类智慧基因一点也不萌萌哒 ...

  10. 带jsk证书,请求https接口

    首先是三个返回的实体类 BaseVo.java package https2; import java.io.Serializable; import java.lang.reflect.Invoca ...