BZOJ原题链接

洛谷原题链接

设\(L[i][j],R[i][j],H[i][j]\)表示点\((i,j)\)向左、右、上尽量拓展的左端点、右端点、上端点的坐标。

\(L,R\)直接初始化好,\(H\)则全部为\(1\)。

扫过整个矩阵,对于每个点,尽量去拓展上端点,并更新\(L[i][j] = \max\{ L[i][j], L[i - 1][j] \}, R[i][j] = \min\{ R[i][j], R[i - 1][j] \}, H[i][j] = H[i - 1][j] + 1\),然后尝试去更新答案即可。

不得不吐糟一句,某谷的数据是真的水。

  1. #include<cstdio>
  2. using namespace std;
  3. const int N = 2010;
  4. int a[N][N], L[N][N], R[N][N], H[N][N];
  5. inline int re()
  6. {
  7. int x = 0;
  8. char c = getchar();
  9. bool p = 0;
  10. for (; c < '0' || c > '9'; c = getchar())
  11. p |= c == '-';
  12. for (; c >= '0' && c <= '9'; c = getchar())
  13. x = x * 10 + c - '0';
  14. return p ? -x : x;
  15. }
  16. inline int maxn(int x, int y)
  17. {
  18. return x > y ? x : y;
  19. }
  20. inline int minn(int x, int y)
  21. {
  22. return x < y ? x : y;
  23. }
  24. inline int squ(int x)
  25. {
  26. return x * x;
  27. }
  28. int main()
  29. {
  30. int i, j, n, m, l, sq = 1, rec = 1;
  31. n = re();
  32. m = re();
  33. for (i = 1; i <= n; i++)
  34. for (j = 1; j <= m; j++)
  35. {
  36. a[i][j] = re();
  37. L[i][j] = R[i][j] = j;
  38. H[i][j] = 1;
  39. }
  40. for (i = 1; i <= n; i++)
  41. for (j = 2; j <= m; j++)
  42. if (a[i][j] ^ a[i][j - 1])
  43. L[i][j] = L[i][j - 1];
  44. for (i = 1; i <= n; i++)
  45. for (j = m - 1; j; j--)
  46. if (a[i][j] ^ a[i][j + 1])
  47. R[i][j] = R[i][j + 1];
  48. for (i = 1; i <= n; i++)
  49. for (j = 1; j <= m; j++)
  50. {
  51. if (i > 1 && a[i][j] ^ a[i - 1][j])
  52. {
  53. L[i][j] = maxn(L[i][j], L[i - 1][j]);
  54. R[i][j] = minn(R[i][j], R[i - 1][j]);
  55. H[i][j] = H[i - 1][j] + 1;
  56. }
  57. l = R[i][j] - L[i][j] + 1;
  58. sq = maxn(sq, squ(minn(l, H[i][j])));
  59. rec = maxn(rec, l * H[i][j]);
  60. }
  61. printf("%d\n%d", sq, rec);
  62. return 0;
  63. }

BZOJ1057或洛谷1169 [ZJOI2007]棋盘制作的更多相关文章

  1. 洛谷1169 [ZJOI2007] 棋盘制作

    题目链接 题意概述:给出由0 1构成的矩阵,求没有0 1 相邻的最大子矩阵的最大子正方形. 解题思路:设f[i][j]表示i j向上能到哪,l[i][j] r[i][j]表示向左/右,转移时分开计算矩 ...

  2. 洛谷 P1169 [ZJOI2007]棋盘制作

    2016-05-31 14:56:17 题目链接: 洛谷 P1169 [ZJOI2007]棋盘制作 题目大意: 给定一块矩形,求出满足棋盘式黑白间隔的最大矩形大小和最大正方形大小 解法: 神犇王知昆的 ...

  3. 洛谷P1169 [ZJOI2007]棋盘制作 悬线法 动态规划

    P1169 [ZJOI2007]棋盘制作 (逼着自己做DP 题意: 给定一个包含0,1的矩阵,求出一个面积最大的正方形矩阵和长方形矩阵,要求矩阵中相邻两个的值不同. 思路: 悬线法. 用途: 解决给定 ...

  4. 【题解】洛谷P1169 [ZJOI2007] 棋盘制作(坐标DP+悬线法)

    次元传送门:洛谷P1169 思路 浙江省选果然不一般 用到一个从来没有听过的算法 悬线法: 所谓悬线法 就是用一条线(长度任意)在矩阵中判断这条线能到达的最左边和最右边及这条线的长度 即可得到这个矩阵 ...

  5. 洛谷 P1169 [ZJOI2007]棋盘制作 (悬线法)

    和玉蟾宫很像,条件改成不相等就行了. 悬线法题目 洛谷 P1169  p4147  p2701  p1387 #include<cstdio> #include<algorithm& ...

  6. [洛谷P1169] [ZJOI2007] 棋盘制作 解题报告(悬线法+最大正方形)

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8×8 大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我 ...

  7. 洛谷P1169[ZJOI2007]棋盘制作

    题目 一道悬线法的裸题,悬线法主要是可以处理最大子矩阵的问题. 而这道题就是比较经典的可以用悬线法来处理的题. 而悬线法其实就是把矩阵中对应的每个位置上的元素分别向左向上向右,寻找到不能到达的地方,然 ...

  8. Luogu 1169 [ZJOI2007]棋盘制作 - 动态规划+单调栈

    Description 给一个01矩阵, 求出最大的01交错的正方形和最大的01交错的矩阵 Solution 用动态规划求出最大的正方形, 用单调栈求出最大的矩阵. 在这里仅介绍求出最大正方形(求最大 ...

  9. luogu 1169 [ZJOI2007]棋盘制作 悬线dp

    悬线法,虽然得不到局部最优解,但是一定能得到全局最优解的算法,十分神奇~ #include <cstdio> #include <algorithm> #define N 20 ...

随机推荐

  1. spark 学习_rdd常用操作

    [spark API 函数讲解 详细 ]https://www.iteblog.com/archives/1399#reduceByKey [重要API接口,全面 ] http://spark.apa ...

  2. orthodb

    1.数据库 orthodb数据: odb10v0_levels.tab.gz: NCBI taxonomy nodes where Ortho DB orthologous groups (OGs) ...

  3. Tween animation

    [Tween animation] An animation defined in XML that performs transitions such as rotating, fading, mo ...

  4. pytest 学习笔记二:兼容unittest、执行方式、生成报告

    1.官方文档上说pytest兼容unittest时,不支持setUpModule 和 tearDownModule,但实际验证是可以的. 验证的场景是py文件中,只有一个测试类, 经验证有多个测试类, ...

  5. Oracle的regexp_instr函数简单用法

    REGEXP_INSTR函数让你搜索一个正则表达式模式字符串.函数使用输入字符集定义的字符进行字符串的计算. 它返回一个整数,指示开始或结束匹配的子位置,这取决于return_option参数的值. ...

  6. python--第七天总结

    引言 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” [面向对象编程(Obj ...

  7. windows(cr lf )转unix (lf)

  8. perl-我的第一个程序

    1.问题描述: 总共90位长度的位流数据,其中只有5位的数据为1,其余位全部为0.统计好多组5位的简化数据(每一位之间空格隔开,每一组一行),将其扩展到90位. #!D:/EDA/Perl/bin $ ...

  9. AI图谱

  10. NumPy 切片和索引

    NumPy 切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样. ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以 ...