hdu4328(经典dp用悬线法求最大子矩形)

时间:2022-03-08 10:03:46

http://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html 关于悬线法,这里面有详解。

我当时只想到了记录最大长度,却没有想到如果连最左边和最右边的位置都记录的话这题就可以解决了。 学习了一种新算法很开心。

Cut the cake

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 881    Accepted Submission(s): 328

Problem Description
Mark bought a huge cake, because his friend ray_sun’s birthday is coming. Mark is worried about how to divide the cake since it’s so huge and ray_sun is so strange. Ray_sun is a nut, you can never imagine how strange he was, is, and going to be. He does not eat rice, moves like a cat, sleeps during work and plays games when the rest of the world are sleeping……It is not a surprise when he has some special requirements for the cake. A considering guy as Mark is, he will never let ray_sun down. However, he does have trouble fulfilling ray_sun’s wish this time; could you please give him a hand by solving the following problem for him?
  The cake can be divided into n*m blocks. Each block is colored either in blue or red. Ray_sun will only eat a piece (consisting of several blocks) with special shape and color. First, the shape of the piece should be a rectangle. Second, the color of blocks in the piece should be the same or red-and-blue crisscross. The so called ‘red-and-blue crisscross’ is demonstrated in the following picture. Could you please help Mark to find out the piece with maximum perimeter that satisfies ray_sun’s requirements?
hdu4328(经典dp用悬线法求最大子矩形)
 
Input
The first line contains a single integer T (T <= 20), the number of test cases.
  For each case, there are two given integers, n, m, (1 <= n, m <= 1000) denoting the dimension of the cake. Following the two integers, there is a n*m matrix where character B stands for blue, R red.
 
Output
For each test case, output the cased number in a format stated below, followed by the maximum perimeter you can find.
 
Sample Input
2
1 1
B
3 3
BBR
RBB
BBB
 
Sample Output
Case #1: 4
Case #2: 8
 
Author
BJTU
 
Source
 
Recommend
zhoujiaqi2010   |   We have carefully selected several similar problems for you:  4321 4366 4335 4377 4371 
 
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
#define N 1010 //最大权子矩阵
int n,m;
int dp[N][N]; //记录每个点可以往上到达的最远距离
int dpl[N][N]; //记录这个点往左最远走多远
int dpr[N][N]; //
char g[N][N];
int ans=;
int tmpl[N],tmpr[N]; void fuc(char key)
{
memset(dp,,sizeof(dp));
memset(dpl,,sizeof(dpl));
memset(dpr,,sizeof(dpr));
int mx=;
for(int i=;i<=m;i++)
{
dpl[][i]=;
dpr[][i]=m;
} for(int i=;i<=n;i++)
{
int tmp=;
for(int j=;j<=m;j++)
{
if(g[i][j]!=key)
{
tmp=j+;
}
else
{
tmpl[j]=tmp;
}
}
tmp=m;
for(int j=m;j>=;j--)
{
if(g[i][j]!=key)
{
tmp=j-;
}
else tmpr[j]=tmp;
}
//记录好了一个点能到达的最左边和最右边,接下来就是dp了
for(int j=;j<=m;j++)
{
if(g[i][j]!=key)
{
dp[i][j]=;//最长为0
dpl[i][j]=; dpr[i][j]=m;
continue;
}
dp[i][j]=dp[i-][j]+;
dpl[i][j]=max(dpl[i-][j],tmpl[j]);
dpr[i][j]=min(dpr[i-][j],tmpr[j]);
mx=max(*(dpr[i][j]-dpl[i][j]++dp[i][j]),mx);
}
}
ans=max(ans,mx);
} int main()
{
int T;
int tt=;
scanf("%d",&T);
while(T--)
{
ans=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%s",g[i]+);
fuc('B');
fuc('R');
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if( (i+j)%== )
{
if(g[i][j]=='B') g[i][j]='R';
else g[i][j]='B';
}
}
//想的还是比较清晰的... fuc('B');
fuc('R');
printf("Case #%d: ",tt++);
printf("%d\n",ans);
}
return ;
}

hdu4328(经典dp用悬线法求最大子矩形)的更多相关文章

  1. BZOJ 1057&colon; &lbrack;ZJOI2007&rsqb;棋盘制作 悬线法求最大子矩阵&plus;dp

    1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...

  2. City Game UVALive - 3029(悬线法求最大子矩阵)

    题意:多组数据(国外题好像都这样),每次n*m矩形,F表示空地,R表示障碍 求最大子矩阵(悬线法模板) 把每个格子向上延伸的空格看做一条悬线 以le[i][j],re[i][j],up[i][j]分别 ...

  3. &lbrack;DP专题&rsqb;悬线法

    参考:https://blog.csdn.net/twtsa/article/details/8120269 先给出题目来源:(洛谷) 1.p1387 最大正方形 2.P1169 棋盘制作 3.p27 ...

  4. P4147 玉蟾宫&lpar;悬线法求最大子矩阵&rpar;

    P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ...

  5. bzoj 3039&colon; 玉蟾宫 单调栈或者悬线法求最大子矩阵和

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 有一天,小猫rainbow ...

  6. bzoj 3039 悬线法求最大01子矩阵

    首先预处理每个F点左右,下一共有多少个F点,然后 对于每个为0的点(R),从这个点开始,一直到这个点 下面第一个R点,这一区间中的min(左),min(右)更新答案. ps:我估计这道题数据有的格式不 ...

  7. 【BZOJ-3039&amp&semi;1057】玉蟾宫&amp&semi;棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 753  Solved: 444[Submit][Status][Discuss] D ...

  8. 2018&period;09&period;29 bzoj3885&colon; Cow Rectangles(悬线法&plus;二分)

    传送门 对于第一个问题,直接用悬线法求出最大的子矩阵面积,然后对于每一个能得到最大面积的矩阵,我们用二分法去掉四周的空白部分来更新第二个答案. 代码: #include<bits/stdc++. ...

  9. &lbrack;ZJOI2007&rsqb;棋盘制作 悬线法dp 求限制下的最大子矩阵

    https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...

随机推荐

  1. git pull错误

    1. Pull is not possible because you have unmerged files. 症状:pull的时候 $ git pull Pull is not possible ...

  2. apache 虚拟主机详细配置:http&period;conf配置详解

    apache 虚拟主机详细配置:http.conf配置详解 Apache的配置文件http.conf参数含义详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd. ...

  3. elf文件中的&period;plt &period;rel&period;dyn &period;rel&period;plt &period;got &period;got&period;plt的关系

    .plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址 .rel.dyn重定向表,在程序启动时就需要重定位完成. .rel.plt保 ...

  4. DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?

    DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?比如我定义个变量 var p:Pchar;如果这个变量声明为全局变量,需要分配内存吗?分配为局部变量,需要分为内存吗?为什么 ...

  5. Firefox 32 支持 Public Key Pinning 对抗中间人攻击。

    Firefox 32 支持 Public Key Pinning 对抗中间人攻击.8月28日消息,即将发布的Firefox 32将支持Public Key Pinning机制,以防止中间人攻击.Pub ...

  6. 【原创】ORA-04068&colon; 已丢弃程序包 的当前状态研究

    不久前在市检的生产环境上有个存储过程执行报错,错误信息如下: ORA: 已丢弃程序包 的当前状态 ORA: package "ZHANGXSH.PR_TEST" 的当前状态失效 O ...

  7. AJAX同步与异步

    今天来大概说说AJAX中的同步与异步.其实,就我的理解,同步与异步的区别就是程序执行过程中是否有等待. 同步:意思就是js代码加载到当前的 AJAX时候,会等待AJAX代码执行完毕后再开始加载其他代码 ...

  8. 【栈】 poj 1363

    poj1363,这道题是数据结构与算法中的经典问题,给定一组进栈顺序,问栈有多少种出去的顺序. #include<stdio.h> #include <stack> #incl ...

  9. Python Django 中间件

    在http请求 到达视图函数之前   和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 中间件的执行流程 1.执行完所有的request方法 到达视图函数. ...

  10. 拦截器通过Spring获取工厂类,注入bean对象

    // 这里需要注意一点,我们在拦截器内无法通过SpringBean的方式注入LoggerJPA,我只能通过另外一种形式. /** * 根据传入的类型获取spring管理的对应dao * @param ...