题目链接:传送门

题目大意:

  给出N*M的字符矩阵(由字符B/R组成),求符合下图条件的子矩阵的最大周长。

  1 ≤ N,M ≤ 1000。

思路:

  悬线法。

#include <iostream>
#include <cstring>
#include <cstdio> using namespace std;
const int MAX_N = 1e3 + ; int N, M;
char mat[MAX_N][MAX_N];
int lef[MAX_N][MAX_N], rig[MAX_N][MAX_N], up[MAX_N][MAX_N]; void init1()
{
for (int i = ; i <= N; i++) {
for (int j = ; j <= M; j++)
if (j > && mat[i][j] == mat[i][j-])
lef[i][j] = lef[i][j-] + ;
else
lef[i][j] = ;
for (int j = M; j >= ; j--)
if (j < M && mat[i][j] == mat[i][j+])
rig[i][j] = rig[i][j+] + ;
else
rig[i][j] = ;
}
} void init2()
{
for (int i = ; i <= N; i++) {
for (int j = ; j <= M; j++)
if (j > && mat[i][j] != mat[i][j-])
lef[i][j] = lef[i][j-] + ;
else
lef[i][j] = ;
for (int j = M; j >= ; j--)
if (j < M && mat[i][j] != mat[i][j+])
rig[i][j] = rig[i][j+] + ;
else
rig[i][j] = ;
}
} int dp1()
{
int ans = ;
for (int i = ; i <= N; i++) {
for (int j = ; j <= M; j++) {
if (i > && mat[i][j] == mat[i-][j]) {
up[i][j] = up[i-][j] + ;
lef[i][j] = min(lef[i][j], lef[i-][j]);
rig[i][j] = min(rig[i][j], rig[i-][j]);
}
else
up[i][j] = ;
int len = lef[i][j] + rig[i][j] - ;
int high = up[i][j];
ans = max(ans, *len+*high);
}
}
return ans;
} int dp2()
{
int ans = ;
for (int i = ; i <= N; i++) {
for (int j = ; j <= M; j++) {
if (i > && mat[i][j] != mat[i-][j]) {
up[i][j] = up[i-][j] + ;
lef[i][j] = min(lef[i][j], lef[i-][j]);
rig[i][j] = min(rig[i][j], rig[i-][j]);
}
else
up[i][j] = ;
int len = lef[i][j] + rig[i][j] - ;
int high = up[i][j];
ans = max(ans, *len + *high);
}
}
return ans;
} int main()
{
int T;
int kase = ;
cin >> T;
while (T--) {
cin >> N >> M;
for (int i = ; i <= N; i++)
for (int j = ; j <= M; j++)
cin >> mat[i][j];
int ans = ;
init1();
ans = max(ans, dp1());
init2();
ans = max(ans, dp2());
printf("Case #%d: %d\n", kase++, ans);
}
return ;
}
/*
2
3 3
BBR
RBB
BBB
1 1
B
*/

HDU4328 Cut the cake(动规:最大子矩形问题/悬线法)的更多相关文章

  1. 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)

    题目链接:传送门 题目大意: 求由F构成的最大子矩阵的面积.输出面积的三倍. 1 ≤ N,M ≤ 1000. 思路: 悬线法模板题. #include <bits/stdc++.h> us ...

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

    http://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html 关于悬线法,这里面有详解. 我当时只想到了记录最大长度,却没有想到如果连最左边和最右 ...

  3. HDU 4328 Cut the cake

    Cut the cake Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  4. vijos1431[noip2007]守望者的逃离(背包动规)

    描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者 在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这 个荒岛施咒,这座岛很快就会 ...

  5. HDU 4762 Cut the Cake(公式)

    Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  6. NOIP2013 提高组day2 2 花匠 动规 找拐点 树状数组

    花匠 描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致. 具体 ...

  7. 区间型动规--石子归并(Pascal)

    题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...

  8. Cut the Cake(大数相乘)

      MMM got a big big big cake, and invited all her M friends to eat the cake together. Surprisingly o ...

  9. 【noip 2009】 乌龟棋 记忆化搜索&动规

    题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...

随机推荐

  1. 解决win10打开组策略弹出管理模板对话框问题

    今天win10企业版更新完系统,打开组策略编辑器时弹出管理模板对话框问题 1.问题描述 打开组策略编辑器时弹出管理模板对话框问题 2.解决方法 1)window+x 打开命令提示符(管理员) 2)输入 ...

  2. AI标尺,管理面板5.8

    拖动左上角的十字形,如图 重新定义坐标原点,双击十字形则恢复默认原点. 如果一个AI文件打开之后有多个画板,那么在重新存储的时候勾选“将每一个画板存储为单独的文件”那么每个画板都存储为单独的画板. “ ...

  3. C#通过shell32获取文件详细备注信息

    1.从系统Window/System32文件夹中Copy出 Shell32.dll Com组件 将Shell32.dll文件引用到项目中,并设置“嵌入互操作类型”为false http://blog. ...

  4. iframe子父页面函数互相调用

    1.iframe子页面调用父页面js函数 子页面调用父页面函数只需要写上window.praent就可以了.比如调用a()函数,就写成: window.parent.a();  子页面取父页面中的标签 ...

  5. [POJ3416]Crossing

    Problem 给你n个点,m个询问,每个询问有x, y 问以(x,y)为原点建立的平面直角坐标系分割的第一象限和第三象限的点数和减去第二象限和第四象限的点数和 Solution 用2个树状数组维护一 ...

  6. Linux下IP的存储位置

    在linux下,配置多个IP的话,通常是eth0... eth0. ..eth0.x等等, 那么如果要配置大量的IP呢,这么配置也是可以的,但是繁琐,虽说这种情况很少. 对于添加大量IP,有一定规定的 ...

  7. 每天CSS学习之text-overflow

    text-overflow是CSS3的一个属性,其作用是当文本溢出包含它的元素时,应该裁剪还是将多余的字符用省略号来表示. 该属性一般和overflow:hidden属性一起使用. text-over ...

  8. 6.5C++查找字符串

    参考:http://www.weixueyuan.net/view/6394.html 总结: find函数可以在字符串中查找子字符串中出现的位置.该函数有两个参数,第一个参数是待查找的子字符串,第二 ...

  9. VCL界面控件DevExpress VCL发布v18.2.2|附下载

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  10. Highcharts 柱图 每个柱子外围的白色边框

    Highcharts 柱图中每条柱外会有默认白色的边框, 去边框代码如下: plotOptions: { bar: { borderColor: "",//去边框 } }