HDU4328 Cut the cake(动规:最大子矩形问题/悬线法)
题目链接:传送门
题目大意:
给出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(动规:最大子矩形问题/悬线法)的更多相关文章
- 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)
题目链接:传送门 题目大意: 求由F构成的最大子矩阵的面积.输出面积的三倍. 1 ≤ N,M ≤ 1000. 思路: 悬线法模板题. #include <bits/stdc++.h> us ...
- hdu4328(经典dp用悬线法求最大子矩形)
http://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html 关于悬线法,这里面有详解. 我当时只想到了记录最大长度,却没有想到如果连最左边和最右 ...
- HDU 4328 Cut the cake
Cut the cake Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- vijos1431[noip2007]守望者的逃离(背包动规)
描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者 在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这 个荒岛施咒,这座岛很快就会 ...
- HDU 4762 Cut the Cake(公式)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- NOIP2013 提高组day2 2 花匠 动规 找拐点 树状数组
花匠 描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致. 具体 ...
- 区间型动规--石子归并(Pascal)
题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...
- Cut the Cake(大数相乘)
MMM got a big big big cake, and invited all her M friends to eat the cake together. Surprisingly o ...
- 【noip 2009】 乌龟棋 记忆化搜索&动规
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
随机推荐
- pycharm搭建开发配置,远程调试,数据库配置,git配置等
1 开发环境搭建 1.1 简介 使用虚拟机作为代码运行环境,本地使用pycharm进行代码编辑,使用远程调试功能进行debug. 1.1 安装centos虚拟机环境: 1.操作系统: 2.网络配置: ...
- SRAM、DRAM、SDRAM、DDR、DDR2、DDR3
RAM可分为SRAM(Static RAM/静态存储器)和DRAM(Dynamic RAM/动态存储器).SRAM是利用双稳态触发器来保存信息的,只要不掉电,信息是不会丢失的.SRAM存储元件所用MO ...
- Javascript this 的一些总结
1.1.1 摘要 相信有C/C++.C#或Java等编程经验的各位,对于this关键字再熟悉不过了.由于Javascript是一种面向对象的编程语言,它和C/C++.C#或Java一样都包含this关 ...
- linux 在执行命令过程中,反单引号(`)这个符号代表的意义为何?
在一串命令中,在`之内的命令将会被先执行,而且执行出来的结果将作为外部的输入信息.例如:uname -r 会显示出目前的内核版本,而我们的内核版本在/lib/modules里面,因此.你可以先执行un ...
- (C/C++学习笔记) 二十. 文件和流
二十. 文件和流 ● 文件的概念 文件(file) 一. C/C++语言将文件作为字节序列(sequence of characters)来对待,但从编码角度,或说从对字节信息的解释来看,文件分为:文 ...
- Android开发 ---Button的OnClickListener的三种实现方法
button的OnClickListener的三种实现方法 onclick事件的定义方法,分为三种,分别为 1.在xml中进行指定方法: 2.在Actitivy中new出一个OnClickListen ...
- linux 下ftp几种上传和下载方式
1. ftp自动登录批量下载文件. 复制代码代码如下: #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<& ...
- oracle截取字段中的部分字符串
使用Oracle中Instr()和substr()函数: 在Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 其语法为: instr(sourceString,de ...
- 字典和json 的区别 和转换
前言:字典和json非常像.接下来比较一下两者的异同 先看一下字典的写法: a = {', ', ' } 再看一下json的写法: { "studentInfo": { " ...
- TkbmMWFileClient产生的Timeout/error waiting for connection.
当文件客户端TkbmMWFileClient产生这个错误,该怎么解决掉呢? 解决方法: 设置ConnectionWaitTimeout为更长时间,这个时间以毫秒为单位,设置20*1000,20秒.