这三道题的关系是这样的,1505是1506的加强版,2870又是1505的加强版

如果按照上面由简到易的顺序来做的话,还是很简单的

这道题的思想就是 枚举+DP

因为某些字符可以变值,所以我们枚举a, b, c三个矩阵

分别求出对应的h数组以及最大子矩阵,再在里面求出一个最大值即可。

 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 const int maxn = 1010;
 9 char map[maxn][maxn];
10 int h[3][maxn], l[3][maxn], r[3][maxn];
11
12 int main(void)
13 {
14     #ifdef LOCAL
15         freopen("2870in.txt", "r", stdin);
16     #endif
17
18     int row, col;
19     while(scanf("%d%d", &row, &col) == 2)
20     {
21         int i, j, k, t;
22         for(i = 0; i < row; ++i)
23             scanf("%s", map[i]);
24         memset(h, 0, sizeof(h));
25         int ans = 0;
26         for(i = 0; i < row; ++i)
27         {
28             for(j = 0; j < col; ++j)
29             {
30                 switch(map[i][j])
31                 {    //处理h数组
32                     case 'a':
33                         ++h[0][j], h[1][j] = h[2][j] = 0;
34                         break;
35                     case 'b':
36                         ++h[1][j], h[0][j] = h[2][j] = 0;
37                         break;
38                     case 'c':
39                         ++h[2][j], h[0][j] = h[1][j] = 0;
40                         break;
41                     case 'w':
42                         ++h[0][j], ++h[1][j], h[2][j] = 0;
43                         break;
44                     case 'x':
45                         ++h[1][j], ++h[2][j], h[0][j] = 0;
46                         break;
47                     case 'y':
48                         ++h[0][j], ++h[2][j], h[1][j] = 0;
49                         break;
50                     case 'z':
51                         ++h[0][j]; ++h[1][j], ++h[2][j];
52                 }
53             }
54             l[0][0] = l[1][0] = l[2][0] = 0;
55             r[0][col-1] = r[1][col-1] = r[2][col-1] = col-1;
56             for(j = 1; j < col; ++j)
57                 for(k = 0; k < 3; ++k)
58                 {
59                     t = j;
60                     while(t > 0 && h[k][j] <= h[k][t-1])
61                         t = l[k][t-1];
62                     l[k][j] = t;
63                 }
64
65             for(j = col-2; j >= 0; --j)
66                 for(k = 0; k < 3; ++k)
67                 {
68                     t = j;
69                     while(t < col-1 && h[k][j] <= h[k][t+1])
70                         t = r[k][t+1];
71                     r[k][j] = t;
72                 }
73
74             for(j = 0; j < col; ++j)
75                 for(k = 0; k < 3; ++k)
76                     ans = max(ans, (r[k][j]-l[k][j]+1)*h[k][j]);
77         }
78         printf("%d\n", ans);
79     }
80     return 0;
81 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3876819.html

HDU 2870 Largest Submatrix相关推荐

  1. 笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)

    文章目录 笛卡尔树 介绍 例题 Largest Submatrix of All 1's 应用 「POI2015」洗车 Myjnie [AGC028B] Removing Blocks SPOJ PE ...

  2. 【POJ - 3494】Largest Submatrix of All 1’s(加一点思维后化成 单调栈)

    题干: Given a m-by-n (0,1)-matrix, of all its submatrices of all 1's which is the largest? By largest  ...

  3. hdu 1506 Largest Rectangle in a Histogram 最大矩形

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1506 Largest Rectangle in a Histogram Time Limit: 20 ...

  4. HDU 1506 Largest Rectangle in a Histogram(dp、单调栈)

    你是不是飘了?骚年! Problem Description A histogram is a polygon composed of a sequence of rectangles aligned ...

  5. HDU 1506 Largest Rectangle in a Histogram

    这个问题姑且也叫做最大子矩阵吧 给一个树状图,求一个最大面积的子矩阵 思路是这样的,对于每个单位矩阵,求出左边连续不比它低的矩阵的下标,放在l数组里 同样,再求出右边连续的不比它低的矩阵的下标 这样, ...

  6. LeetCode 第 224 场周赛 5655. Largest Submatrix With Rearrangements【动态规划】⭐⭐⭐⭐⭐

    文章目录 题目描述 知识点 我的实现 码前思考 代码实现 时空复杂度分析 码后反思 参考文档 题目描述 知识点 动态规划 我的实现 码前思考 这道题目的motivation跟LeetCode 85非常 ...

  7. HDU OJ 动态规划46题解析

    Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955  背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢 ...

  8. HDU中一些DP的题目分类

    DP是难点,供自已以后系统学习. 1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包;第一次做的时候把概率当做 ...

  9. hdu 动态规划题集

    原文链接:http://blog.sina.com.cn/s/blog_6cf509db0100sptt.html点击打开链接 1.Robberies 连接 :http://acm.hdu.edu.c ...

  10. hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)

    HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包 ...

最新文章

  1. python下使用epoll
  2. WEB中会话跟踪[转]
  3. fcntl函数完成 set_fl()函数还有clr_fl()函数的封装
  4. spring boot原理_SpringBoot-02-原理初探之主启动类
  5. matlab m序列,m序列(M序列与m序列区别)
  6. brew 安装软件能指定文件夹吗_Mac下Homebrew安装的软件放在什么地方
  7. SMB协议端口号,Windows文件共享协议
  8. Pikachu实验重现2(Sql的注入)
  9. STM32——PS2遥控手柄
  10. 黎活明给程序员的忠告
  11. 群晖NAS跨存储空间移动套件(应用)
  12. ddos应急处理_来看看DDoS攻击应急预案
  13. 不叫 Andromeda?Google 新系统疑为 Fuchsia
  14. html给页面添加艺术型边框,如何为2016word的页面设置艺术型页面边框
  15. 道创峰会2020:伯克利学生分享会|快来线下碰一碰
  16. TL-R473P-AC【搭配面板式AP组网设置方法】
  17. 「 LaTex 」写论文,作者旁添加ORCID
  18. 使用VMD中的Tachyon渲染出透明逼真的水盒子效果
  19. CATIA鼠标操作简介
  20. 4210: 孙壕请一盘青岛大虾呗【递归/注意结束条件】

热门文章

  1. 第 3 章 sqlmap - automatic SQL injection and database takeover tool
  2. )C# Enum,Int,String的互相转换 枚举转换
  3. Kettle_设置全局变量
  4. 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
  5. MFC(6)点击按钮弹出新的对话框源码
  6. T-SQL笔记8:索引
  7. 通过tomcat插件启动Maven工程
  8. ES6、7学习笔记(尚硅谷)-4-模板字符串
  9. pylon保存图片_3.Pylon 以实时图像采集讲解PylonC SDK使用流程 | 学步园
  10. python中的引用怎么理解_浅谈动态类型领域中 Python 的变量、对象以及引用