HDU1506

HDU2870

HDU4328

以前做的是单调队列的方法,现在试一试DP

注意的是对于i,向左延伸的L[i]到i不一定是单调的,比如1 3 2 1 2,对于i=4,L[i]=1而是2所以不能简单的和左边第一个比较

错:  if(a[i]<=a[i-1]) L[i]=L[i-1]+1;

HDU1506
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<memory.h>
using namespace std;
#define LL long long
const int maxn=;
LL L[maxn],R[maxn],h[maxn],ans,tmp;
int main()
{
int n,i,t;
while(~scanf("%d",&n))
{
if(n==) return ;
for(i=;i<=n;i++) scanf("%lld",&h[i]);
L[]=;R[n]=n;
for(i=;i<=n;i++) {
t=i;
while(t>&&h[t-]>=h[i]) t=L[t-];
L[i]=t;
}
for(i=n-;i>=;i--){
t=i;
while(t<n&&h[t+]>=h[i]) t=R[t+];
R[i]=t;
}
ans=h[];
for(i=;i<=n;i++){
tmp=h[i]*(R[i]-L[i]+);
if(tmp>ans) ans=tmp;
}
printf("%lld\n",ans);
}
return ;
} HDU2870
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<memory.h>
#include<cmath>
using namespace std;
char c[][];
int L[],R[],D[][];
int n,m,ans;
bool _w(char a,char b){
if(b=='a'&&(a=='a'||a=='w'||a=='y'||a=='z')) return true;
if(b=='b'&&(a=='b'||a=='w'||a=='x'||a=='z')) return true;
if(b=='c'&&(a=='c'||a=='y'||a=='x'||a=='z')) return true;
return false;
}
void _get(char u)
{
int i,j,t;
memset(D,,sizeof(D));
memset(L,,sizeof(L));
memset(R,,sizeof(R));
for(i=n;i>=;i--)
for(j=;j<=m;j++)
if(_w(c[i][j],u))
D[i][j]=D[i+][j]+;
for(i=;i<=n;i++){
L[]=;R[m]=m;
for(j=;j<=m;j++){
t=j;
while(t>&&D[i][j]<=D[i][t-]) t=L[t-];
L[j]=t;
}
for(j=m-;j>=;j--){
t=j;
while(t<m&&D[i][j]<=D[i][t+]) t=R[t+];
R[j]=t;
}
for(j=;j<=m;j++){
ans=max(ans,(R[j]-L[j]+)*D[i][j]);
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m)){
for(int i=;i<=n;i++) scanf("%s",c[i]+);
ans=;
_get('a');
_get('b');
_get('c');
printf("%d\n",ans);
}
return ;
}
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<memory.h>
#include<cmath>
using namespace std;
char c[][];
int L[],R[],D[][];
int n,m,ans;
void _getd(char u)
{
int i,j;
memset(D,,sizeof(D));
for(i=n;i>=;i--)
for(j=;j<=m;j++)
if(c[i][j]==u)
D[i][j]=D[i+][j]+; }
void _get1()
{
int i,j;
memset(D,,sizeof(D));
for(i=n;i>=;i--)
for(j=;j<=m;j++){
if((i+j)%==&&c[i][j]=='B')
D[i][j]=D[i+][j]+;
if((i+j)%==&&c[i][j]=='R')
D[i][j]=D[i+][j]+;
}
}
void _get2()
{
int i,j;
memset(D,,sizeof(D));
for(i=n;i>=;i--)
for(j=;j<=m;j++){
if((i+j)%==&&c[i][j]=='R')
D[i][j]=D[i+][j]+;
if((i+j)%==&&c[i][j]=='B')
D[i][j]=D[i+][j]+;
}
}
void _get(char u)
{
int i,j,t;
if(u=='X') _get1();
else if(u=='Y') _get2();
else _getd(u);
for(i=;i<=n;i++){
L[]=;R[m]=m;
for(j=;j<=m;j++){
t=j;
while(t>&&D[i][j]&&D[i][j]<=D[i][t-]) t=L[t-];
L[j]=t;
}
for(j=m-;j>=;j--){
t=j;
//为什么不加D[i][j]就一直WA??? 因为高为0时是两条线段,不是矩形。。。
while(t<m&&D[i][j]&&D[i][j]<=D[i][t+]) t=R[t+];
R[j]=t;
}
for(j=;j<=m;j++){
ans=max(ans,*((R[j]-L[j]+)+D[i][j]));
}
}
}
int main()
{
int T,Case=;
scanf("%d",&T);
while(T--){
ans=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%s",c[i]+);
_get('R');_get('B');_get('X');_get('Y');
printf("Case #%d: %d\n",++Case,ans);
}
return ;
}

HDU2870 最大窗口面积(单调队列优化)的更多相关文章

  1. 单调队列优化&&P1886 滑动窗口题解

    单调队列: 顾名思义,就是队列中元素是单调的(单增或者单减). 在某些问题中能够优化复杂度. 在dp问题中,有一个专题动态规划的单调队列优化,以后会更新(现在还是太菜了不会). 在你看到类似于滑动定长 ...

  2. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  3. 洛谷 P3957 跳房子 —— 二分答案+单调队列优化DP

    题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 ...

  4. 【单调队列优化】[CF372C] Watching Fireworks is Fun

    突然发现我可能单调队列都打不来了...我太菜了... 这道题显然有$$f[i][j]=min\{f[i-1][k]+\vert j-a[i] \vert\}$$ 则$ans=\sum_{i=1}^{m ...

  5. USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)

    https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...

  6. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  7. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  8. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

  9. [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)

    DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...

  10. UESTC 880 生日礼物 --单调队列优化DP

    定义dp[i][j]表示第i天手中有j股股票时,获得的最多钱数. 转移方程有: 1.当天不买也不卖: dp[i][j]=dp[i-1][j]; 2.当天买了j-k股: dp[i][j]=max(dp[ ...

随机推荐

  1. X-NUCA联赛WEB赛前指导write-up

    第一关 审查代码发现有隐藏的连接,访问,flag一闪而过.打开burpsuite,设置好代理,然后重新访问,在历史里找相应的回复包,得到flag. 第二关 审查元素 修改按钮为可用 抓获一个POST包 ...

  2. 千亿级SaaS市场:企业级服务的必争之地

    2015年企业级服务融资案例数量飙升,大额融资频现.不少企业纷纷涉足企业级服务市场,其中,以IM为主打的阿里钉钉,以企业CRM为主的纷享逍客高调进入人们的视野,以产品管理为核心.集成多种工具服务的iC ...

  3. zw黑天鹅足彩实盘测试5月数据包

    [文件说明] $mx1,是单日数据:$mx9,是日数据和 入选率:2%, 准确度:40% 盈利率:120%左右 目前在测试稳定性 5月1日-6月14日,实盘数据 $mx9,15061409x15061 ...

  4. 20155334 2016-2017-2 《Java程序设计》第七周学习总结

    20155334 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章:Lambda 认识Lammbda语法 Lambda去可以重复,符合DRY原则,而且 ...

  5. python uwsgi报错epoll_ctl(): Bad file descriptor

    今天安装了uwsgi+supervisord+nginx,一直访问不了 直接启动uwsgi使用nginx访问,查看有大量报错:epoll_ctl(): Bad file descriptor [cor ...

  6. jquery 添加列

    {field:'action',title:'操作',width:70,align:'center',  formatter:function(value,row,index){  if (row.e ...

  7. python webdriver 测试框架-数据驱动exce驱动,不用ddt的方式

    data.xlsx: 脚本: #encoding=utf-8from selenium import webdriverimport timeimport datetimefrom openpyxl ...

  8. Jquery的深度拷贝和深度克隆

    有人问,拷贝和克隆不都是“复制”的意思吗. 这位看官问的好,一般情况下是一样的,但在jquery中却有些不同.jqurey深度拷贝一般只js对象的复制,是$.extend()方法,jquery深度克隆 ...

  9. 再也不学AJAX了!(三)跨域获取资源 ③ - WebSocket & postMessage

    让我们先简单回顾一下之前谈到的内容,AJAX是一种无页面刷新的获取服务器资源的混合技术.而基于浏览器的"同源策略",不同"域"之间不可以发送AJAX请求.但是在 ...

  10. artTemplate 模板使用

    下载github中文件,浏览器引用lib/template-web.js 模板html: {{each ProductInfoList as prd}} <div class="res ...