#HDU 1506 dp求最大子矩阵
2017-07-24 14:27
323 查看
Largest Rectangle in a Histogram
题意:求一列连续柱状图中最大的一个矩阵。
分析:对于每一个柱形(宽度为 1),我们分别向左&向右找到连续的比它高的柱形,用两个数组记录左右的最大值,然后依据 (r-l+1)*h 求出矩阵面积。
代码如下:
JNU-ACM-ICPC
WYC
题意:求一列连续柱状图中最大的一个矩阵。
分析:对于每一个柱形(宽度为 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 0x3f3f3f3f using namespace std; typedef long long ll; #define MAXN 100005 ll 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; 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
相关文章推荐
- #HDU 2870 dp最大子矩阵
- hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)
- hdu 1506 Largest Rectangle in a Histogram ((dp求最大子矩阵))
- #HDU 1505 dp 最大子矩阵
- HDU 1506 (DP求最大子矩阵)
- HDU2870----DP_最大子矩阵系列(同HDU1505,1506)
- hdu 1506(dp求最大子矩阵)
- hdu 1506 Largest Rectangle in a Histogram ((dp求最大子矩阵))
- HDU 1506 Largest Rectangle in a Histogram(dp求最大子矩阵和)
- 51nod1051_DP求最大子矩阵
- uvaLA 3029 最大子矩阵(DP)
- nyoj 104 最大和 51nod oj 1051 最大子矩阵和 【DP】
- HDOJ-最大子矩阵(二维dp)
- openjudge 最大子矩阵 (DP 动态规划)
- ZOJ1074 最大和子矩阵 DP
- ZOJ1074 最大和子矩阵 DP最大连续子序列
- HDU 1559 最大子矩阵(DP)
- 51Nod - 1051 最大子矩阵和(dp)
- HDU 2830 Matrix Swapping II(dp最大子矩阵和)
- HDU 1559 最大子矩阵 (给定大小) DP