#HDU 1506 dp求最大子矩阵
来源:互联网 发布:angular.js官网 编辑:程序博客网 时间:2024/06/05 08:39
Largest Rectangle in a Histogram
题意:求一列连续柱状图中最大的一个矩阵。
分析:对于每一个柱形(宽度为 1),我们分别向左&向右找到连续的比它高的柱形,用两个数组记录左右的最大值,然后依据 (r-l+1)*h 求出矩阵面积。
代码如下:
#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <map>#include <queue>#include <set>#include <stack>#include <string>#define INF 0x3f3f3f3fusing namespace std;typedef long long ll;#define MAXN 100005ll Left[MAXN],Right[MAXN],Num[MAXN];int main(){ ll n; while(cin>>n&&n){ memset(Num,0,sizeof(Num)); memset(Left,0,sizeof(Left)); memset(Right,0,sizeof(Right)); for(ll i=1;i<=n;i++){ scanf("%lld",&Num[i]); } Left[1]=1; for(ll i=2;i<=n;i++){ ll j=i; while(j>1&&Num[i]<=Num[j-1])j=Left[j-1]; Left[i]=j;//zui zuobian } Right[n]=n; for(ll i=n-1;i>=1;i--){ ll j=i; while(j<n&&Num[i]<=Num[j+1])j=Right[j+1]; Right[i]=j; } ll ans=0; for(ll i=1;i<=n;i++){ if(ans<Num[i]*(Right[i]-Left[i]+1)){ ans=Num[i]*(Right[i]-Left[i]+1); } } printf("%lld\n",ans); } return 0;}
JNU-ACM-ICPC
WYC
阅读全文
0 0
- HDU 1506 dp求最大子矩阵 *
- #HDU 1506 dp求最大子矩阵
- 【DP求最大子矩阵面积】hdu 1506
- HDU 1506 (DP求最大子矩阵)
- hdu 1506 求最大子矩阵 简单DP 迭代法
- HDU 1506 DP 最大完全子矩阵
- HDU 2870 Largest Submatrix DP求最大子矩阵
- hdu 1506 Largest Rectangle in a Histogram ((dp求最大子矩阵))
- HDU 1506 Largest Rectangle in a Histogram(dp求最大子矩阵和)
- DP求一类最大子矩阵
- maxsum(dp求最大子矩阵)
- HDU 1505 求最大子矩阵(二维)
- HDU 1505 1506 2830 2870求最大矩阵面积 DP
- hdu 1559【最大子矩阵和DP】
- hdu 1559 最大子矩阵(DP)
- HDU 1559 最大子矩阵(DP)
- HDU 1505 DP 最大完全子矩阵
- hdu 4328 最大子矩阵(DP)
- [LeetCode]500. Keyboard Row
- 跟踪pmon
- POJ
- iOS UIApplication详解(单例、功能)
- quadratic equation 17年省赛F题,SDUT 3898
- #HDU 1506 dp求最大子矩阵
- PHP的执行原理/执行流程
- android轮播图Banner的使用及详解
- win10安装centos7双系统 总结
- data augmentation
- WCF 结合MSMQ,使服务更稳定
- Android高性能文件类MemoryFile (2011-01-15 14:50:57)
- 35. Search Insert Position
- 获取元素的高度