HDU 1506 动态规划(DP) Largest Rectangle in a Histogram
来源:互联网 发布:2016怎么做好淘宝 编辑:程序博客网 时间:2024/06/01 03:58
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506
分析:[本题深化版HDU 1505]一开始我用暴力,总是超时.后来才用DP过的.要得到最大的面积,肯定要得到相应的长和高,而高就肯定是n个高度中的某一个,关键是找到长.我们可把每个矩形以本身的高度向两边延伸(左端L右端R)的长度算出为(R-L+1).如果f[i]>f[i-1],则L[i-1]也满足i,即L[i]=L[i-1],进一步如果f[i]>f[L[i]-1],则L[i]=L[L[i]-1].同理,R也有类似的性质.
#include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;const int maxn=100000+10;int f[maxn];int L[maxn],R[maxn];int main(){ int n; while(~scanf("%d",&n),n){ for(int i=0;i<n;++i){ scanf("%d",f+i); L[i]=i;R[i]=i; } for(int i=0,j=n-1;i<n;--j,++i){ while(L[i]&&f[L[i]-1]>=f[i]) L[i]=L[L[i]-1]; while(R[j]<n-1&&f[R[j]+1]>=f[j]) R[j]=R[R[j]+1]; } __int64 ans=0; for(int i=0;i<n;++i){ __int64 s=(__int64)f[i]*(R[i]-L[i]+1); ans=max(s,ans); } printf("%I64d\n",ans); } return 0;}
- HDU 1506 动态规划(DP) Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram 【动态规划】
- hdu 1506 Largest Rectangle in a Histogram[动态规划]
- HDU 1506(Largest Rectangle in a Histogram)动态规划
- HDU 1506 Largest Rectangle in a Histogram 动态规划
- 动态规划-Largest Rectangle in a Histogram- HOJ 1506
- hdoj-1506-Largest Rectangle in a Histogram【动态规划】
- HDU 1505 Largest Rectangle in a Histogram && HDU 1506 City Game(动态规划)
- hdu 1506 Largest Rectangle in a Histogram DP 单调队列
- hdu 1506 (dp) Largest Rectangle in a Histogram
- HDU 1506 Largest Rectangle in a Histogram(DP)
- HDU 1506 Largest Rectangle in a Histogram(DP)
- HDU 1506 Largest Rectangle in a Histogram(dp)
- Largest Rectangle in a Histogram - HDU 1506 dp
- HDU 1506 Largest Rectangle in a Histogram(DP)
- hdu 1506 Largest Rectangle in a Histogram(DP)
- hdu 1506 Largest Rectangle in a Histogram DP
- HDU 1506 Largest Rectangle in a Histogram (线性dp)
- 国外程序员推荐:每个程序员都应读的书
- IOS:StatusBar(状态栏)
- 搜狐实习笔试题目
- 利用sshfs实现Linux远程硬盘挂载
- 利用 Heritrix 构建特定站点爬虫
- HDU 1506 动态规划(DP) Largest Rectangle in a Histogram
- hdu 2159 FATE (dp)
- Android开发第1-3课:建立一个简单的用户交互界面
- 第15章 实体和编码
- Socket bind failed: [730048] 解决方法
- Android开发第1-4课:启动另一个Activity
- HDU 2544
- 程序员技术练级攻略
- 第16章 国际化