POJ 2559 Largest Rectangle in a Histogram DP
来源:互联网 发布:backtrack5软件下载 编辑:程序博客网 时间:2024/06/01 21:32
神奇的DP:
用2个数组r[i],l[i]表示以第i个矩形的高度并包含这个矩形所组成的最大矩形的左右宽度的边界位置;
扩展左边界:
1。如果第j个矩型的高度比第i个矩阵(1<j<i)的高度低则做边界位置为i,即l[i]=j+1,终止;
2。如果高(或相等),则继续向左扩展,直到符合条件1。就终止。
扩展右边界:
类扩展左边界。
以下对于扩展左边界的解释:
n(100000)数据很大,如果用以下方法做(类似暴力吧),我们模拟一下发现,如果第j个矩阵扩展的左边界已经得到,在扩展其他第i(i>j)个矩阵时做了很多第j个矩阵扩展的操作,重复了,这样做 无疑 地TLE了;
错误做法:
for(i=1;i<=n;i++){ int j=i; while(j>1&&a[j]>a[i])j--;//a[i]表示第i个矩形的高度 a[i]=j+1;}
此题用DP就可以避免重复扩展,当第j个矩形扩展到第第i个矩形时(j>i)此时无疑第i个矩形已经扩展好了。
1。如果第j个矩形的高度比第i个矩形低,l[i]=j+1,终止
2。如果高(或相等),直接把j的位置跳到l[j]的位置,直到符合条件1时终止。
另本题还要注意数据范围,要用__int64
DP:
for(i=1;i<=n;i++) { j=i; while(j!=1&&a[j-1]>=a[i]) j=l[j-1]; l[i]=j; }
AC代码
View Code
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 100004#define lld __int64lld r[maxn],l[maxn],a[maxn];lld n;int main(){ lld i, j; while(~scanf("%I64d",&n)&&n) { for(i=1;i<=n;i++) scanf("%I64d",&a[i]); for(i=1;i<=n;i++) { j=i; while(j!=1&&a[j-1]>=a[i]) j=l[j-1]; l[i]=j; } for(i=n;i>=1;i--) { j=i; while(j!=n&&a[j+1]>=a[i]) j=r[j+1]; r[i]=j; } lld ans = 0; for(i=1;i<=n;i++) ans = max(ans,(r[i]-l[i]+1)*a[i]); printf("%I64d\n",ans); } return 0;}
- poj 2559 Largest Rectangle in a Histogram dp!!!
- POJ 2559 Largest Rectangle in a Histogram DP
- poj 2559 Largest Rectangle in a Histogram
- POJ 2559 - Largest Rectangle in a Histogram
- poj 2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram
- poj 2559 Largest Rectangle in a Histogram
- 【poj 2559】Largest Rectangle in a Histogram
- poj 2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram
- poj 2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram
- POJ 2559Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram
- poj 2559 Largest Rectangle in a Histogram
- hdu 4027 Can you answer these queries?
- POJ 1149 PIGS 最大流
- POJ 2112 Optimal Milking 二分+floyd+最大流
- POJ 1459 Power Network 最大流水题
- POJ 1087 A Plug for UNIX 最大流
- POJ 2559 Largest Rectangle in a Histogram DP
- POJ 2537 Tight words DP
- ssh action中service无法注入,报空指针问题
- POJ 1745 Divisibility 类似0-1背包DP
- POJ 2385 Apple Catching DP
- POJ 1837 Balance 0-1背包
- 背包九讲(转载)
- POJ 1276 Cash Machine 多重背包
- POJ 3624 Charm Bracelet 赤裸裸的0-1背包