HDU2870 最大窗口面积(单调队列优化)
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 最大窗口面积(单调队列优化)的更多相关文章
- 单调队列优化&&P1886 滑动窗口题解
单调队列: 顾名思义,就是队列中元素是单调的(单增或者单减). 在某些问题中能够优化复杂度. 在dp问题中,有一个专题动态规划的单调队列优化,以后会更新(现在还是太菜了不会). 在你看到类似于滑动定长 ...
- 单调队列以及单调队列优化DP
单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...
- 洛谷 P3957 跳房子 —— 二分答案+单调队列优化DP
题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 ...
- 【单调队列优化】[CF372C] Watching Fireworks is Fun
突然发现我可能单调队列都打不来了...我太菜了... 这道题显然有$$f[i][j]=min\{f[i-1][k]+\vert j-a[i] \vert\}$$ 则$ans=\sum_{i=1}^{m ...
- USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)
https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- 单调队列优化DP,多重背包
单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...
- 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 ...
- [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...
- UESTC 880 生日礼物 --单调队列优化DP
定义dp[i][j]表示第i天手中有j股股票时,获得的最多钱数. 转移方程有: 1.当天不买也不卖: dp[i][j]=dp[i-1][j]; 2.当天买了j-k股: dp[i][j]=max(dp[ ...
随机推荐
- JS获取客户端系统当前时区
<script> function getClientTimezone(){ var oDate = new Date(); var nTimezone = -oDate.getTimez ...
- tornado 入门
Overview FriendFeed是一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 weba ...
- 2.6 The Object Model -- Bindings
一个binding在两个属性之间创建一个链接,当一个改变时,另外一个被自动更新为一个新的值. bindings可以在同一个对象中连接两个属性,或者用在两个不同的对象中. 不像大多数框架一样包含某种形式 ...
- 33Sql数据删除与遍历
数据库的创建.添加.修改.查询.删除都是利用SQL语句和类QSqlQuery的结合. QSqlDatabase::database().可返回当前正在打开的数据库对象. 数据库的删除 //获取删除的名 ...
- 项目管理工具- Maven
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3. ...
- BurpSuite工具应用
BurpSuite工具应用 BurpSuite是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP ...
- 高级bash脚本编程(三)
高级bash脚本编程 知识点 compound 和 comparison -a 逻辑与 exp1 -a exp2 如果表达式 exp1 和 exp2 都为真的话,那么结果为真. -o 逻辑或 exp1 ...
- FastCGI介绍及Nginx fastcgi配置优化
FastCGI介绍 FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务 ...
- 2019年,给JAVA程序员六个建议
1.深入学习一项技能 或许你学习了很多各种高大上的框架与知识点,对其都了解一二,那么你的视野是很广的,但是这并不能很稳妥的为你的未来带来更好的提升,正如18年末的程序员寒季,大批程序员被辞,我想我们应 ...
- spark streaming 使用geoIP解析IP
1.首先将GEOIP放到服务器上,如,/opt/db/geo/GeoLite2-City.mmdb 2.新建scala sbt工程,测试是否可以顺利解析 import java.io.Fileimpo ...