Largest Rectangle in a Histogram(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=1506
题意:给出n个矩形的高度,每个矩形的宽都为1,求相邻的矩形能组合成的最大的矩形的面积。
思路:求出比第i个矩形大的最左边的矩形的位置 l[i], 及比第i个矩形大的最右边的矩形的位置 r[i], 则第i个矩形的面积 s = (r[i]-l[i]+1)*hign[i]。
如果第i-1个矩形比第i个矩形大,则 l[i] 必定在 l[i-1]的 左边,同理,r[i]必定在 r[i+1]的右边。
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define LL __int64
const int N=;
using namespace std;
LL high[N],l[N],r[N];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
for (int i = ; i <= n; i++)
scanf("%I64d",&high[i]);
for (int i = ; i <= n; i++)
{
int pos = i;
while(pos > && high[pos-] >= high[i])
{
pos = l[pos-];//如果第i个矩形左边的矩形(pos-1)比i高,
//则pos移动到l[pos-1](即比第pos-1个矩形高的最左边的矩形的位置)
}
l[i] = pos;//l[i]表示比第i个矩形连续高的最左边的矩形位置
}
for (int i = n; i >= ; --i)
{
int pos = i;
while(pos < n && high[i] <= high[pos+])
{
pos = r[pos+];
}
r[i] = pos;//表示比第i个矩形连续高的最右边的矩形位置
}
LL maxn = ;
for (int i = ; i <= n; i++)
{
maxn = max((r[i]-l[i]+)*high[i],maxn);
}
printf("%I64d\n",maxn);
}
return ;
}
同类型的题:
http://acm.hdu.edu.cn/showproblem.php?pid=1505
#include <stdio.h>
#include <algorithm>
#include <string.h>
#define LL __int64
const int N=;
using namespace std;
LL l[N],r[N],high[N]; LL max_area(int m)
{
for (int i = ; i <= m; i++)
{
if(i > && high[i] <= high[i-])
{
l[i] = l[i-];
}
else
l[i] = i;
}
for (int i = m; i >= ; i--)
{ if(i < m && high[i] <= high[i+])
{
r[i] = r[i+];
}
else
r[i] = i;
}
LL maxn = ;
for (int i = ; i <= m; i++)
{
maxn = max((r[i]-l[i]+)*high[i],maxn);
}
return maxn;
}
int main()
{
int t;
char s[];
scanf("%d",&t);
while(t--)
{
int n,m;
LL ans = ;
scanf("%d %d",&n,&m);
memset(high,,sizeof(high));
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
scanf("%s",s);
if (s[]=='F')
high[j]++;
else
high[j] = ;
}
ans = max(max_area(m),ans);//第一行到第i行最大的面积
}
printf("%I64d\n",ans*);
}
return ;
}
Largest Rectangle in a Histogram(dp)的更多相关文章
- hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- HDU 1506 Largest Rectangle in a Histogram(DP)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- BNUOJ-15505 Largest Rectangle in a Histogram DP
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=15505 每个h[i]维护两个值l[i]和r[i],分别表示大于h[i]的左边最远距离和小于 ...
- HDU1506 ( Largest Rectangle in a Histogram ) [dp]
近期情绪太不稳定了.可能是由于在找实习这个过程碰壁了吧.第一次面试就跪了,可能是我面的是一个新公司,制度不完好,我感觉整个面试过程全然不沾编程,我面试的还是软件开发-后来我同学面试的时候.说是有一道数 ...
- hdu 1506 Largest Rectangle in a Histogram ((dp求最大子矩阵))
# include <stdio.h> # include <algorithm> # include <iostream> # include <math. ...
- Largest Rectangle in a Histogram(DP)
Largest Rectangle in a Histogram Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K ...
- HDU 1506 Largest Rectangle in a Histogram (dp左右处理边界的矩形问题)
E - Largest Rectangle in a Histogram Time Limit:1000MS Memory Limit:32768KB 64bit IO Format: ...
- POJ 2559 Largest Rectangle in a Histogram (单调栈或者dp)
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15831 ...
- NYOJ-258/POJ-2559/HDU-1506 Largest Rectangle in a Histogram,最大长方形,dp或者单调队列!
Largest Rectangle in a Histogram 这么经典的题硬是等今天碰到了原题现场懵逼两小时才会去补题.. ...
随机推荐
- 实例分割:MaskXRCnn 与Visual Genome数据集
一.VG数据集 机器学习领域的突破突然让计算机获得了以未曾有的高精度识别图像中物体的能力--几乎达到了让人惊恐的程度.现在的问题是机器是否还能更上层楼,学会理解这些图片中所发生的事件. Visual ...
- CSS3:变换和动画
<html> <style> .container{ -webkit-perspective: 800; -webkit-perspective-origin: 50% 40% ...
- (转)Hibernate关联映射——一对多(多对一)
http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射——一对多(多对一) 我们以客户(Customer)与 ...
- B.4 集
在.NET 3.5之前,框架中根本没有公开集(set)集合.如果要在.NET 2.0中表示集,通常会 使用 Dictionary<,> ,用集的项作为键,用假数据作为值..NET3.5的 ...
- NTP测试1
ntp server A : 10.101.75.8 B : 10.101.75.38 B: [root@r10n16313.sqa.zmf /home/ahao.mah] #cat /etc/ntp ...
- JS练习:两级联动
代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...
- RESTful API - 介绍
目录 RESTful API 介绍 RESTful介绍 RESTful API设计指南 API与用户的通信协议 域名 版本(Versioning) 路径(Endpoint) 浏览器请求方式(metho ...
- [luoguP2870] [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold(后缀数组)
传送门 数据小的话贪心就行. 可以把这个串翻转再接到后面,再求后缀数组,求出 rank 数组就很简单了. ——代码 #include <cstdio> #include <iostr ...
- Tomcat 7源码学习笔记 -9 tomcat重启后session仍然保留
使用Tomcat 7缺省的配置,tomcat关闭后重新启动,发现原来的session没有被删掉,用原来的request获取session仍然可以取到.但是并没有配置session持久化. 原因如下: ...
- Android Fragment实现button间的切换
原文地址:http://blog.csdn.net/a123demi/article/details/32693037 Fragment要点 Fragment是activity的界面中的一部分或一种行 ...