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格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
随机推荐
- How to import a GitHub project into Eclipse
Assuming you have created a project in GitHub, these are the steps to import it into Eclipse. First, ...
- vue-cli webpack全局引入jquery
1.首先在package.json里加入, dependencies:{ "jquery" : "^2.2.3" } 2.安装依赖 npm install jq ...
- Linux 控制CPU使用率
曾经看过<编程之美>上提到说使 CPU的使用率固定在百分之多少.然后这次刚好要用到这个东西,下面是一个简单的实现.基于多线程: Linux 版本: #include <iostrea ...
- linux下free命令详解
free 命令显示系统内存的使用情况,包括物理内存.交换内存(swap)和内核缓冲区内存. 如果加上 -h 选项,输出的结果会友好很多: 有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指 ...
- learning scala output to console
控制台输出语句: print println example: scala> print("i=");print(i)i=345scala> println(" ...
- Uva LV 2995 Image Is Everything 模拟,坐标映射,视图映射 难度: 1
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- Django ajax提交 登录
一.url from django.contrib import adminfrom django.urls import pathfrom appo1 import views urlpattern ...
- json 2017-04-21 10 17
jo := SO(); jo.S['tttt'] := 'tttt'; TbSendedTidJson['jo'] := jo; ja := TbSendedTidJson['jo'];//取出来后, ...
- Cracking The Coding Interview 9.6
//原文: // // Given a matrix in which each row and each column is sorted, write a method to find an el ...
- Java流对象理解
马士兵老师,曾在Java的学习过程中,将Java的流比作管道,认为很贴切,在此笔者也建议读者在学习过程中作类似比喻,形象化的学习 Java根据数据流向的不同分为输入流和输出流: Java根据处理数据类 ...