题目

传送门:QWQ

分析

先把题目给出的矩阵变换一下,如果$ a[i][j] $中$ i+j \mod 2 = 1 $那么就对$ a[i][j] $取一下反。

接着就是求原图中最大的0、1子矩阵

详见lrj蓝书,悬线法维护最大0、1子矩阵。

代码

  1. #include<bits/stdc++.h>
  2. #define left lft
  3. #define right rght
  4. using namespace std;
  5. const int maxn=;
  6. int left[maxn][maxn], right[maxn][maxn], up[maxn][maxn] ;
  7. int mp[maxn][maxn];
  8. int sqr(int x){return x*x;}
  9. int main(){
  10. int n,m;scanf("%d%d",&n,&m);
  11. for(int i=;i<=n;i++)
  12. for(int j=;j<=m;j++){
  13. scanf("%d",&mp[i][j]); if((i+j)%) mp[i][j]^=;
  14. }
  15. int ans1=,ans2=;
  16. for(int i=;i<=m;i++) right[][i]=1e9;
  17. for(int i=;i<=n;i++){
  18. left[i][]=; right[i][m]=m;
  19. int le=,ri=m+;
  20. for(int j=;j<=m;j++){
  21. if(mp[i][j]){
  22. up[i][j]=up[i-][j]+; left[i][j]=max(left[i-][j],le+);
  23.  
  24. }
  25. else{ le=j; }
  26. }
  27.  
  28. for(int j=m;j>=;j--){
  29. if(mp[i][j]){
  30. right[i][j]=min(ri-,right[i-][j]);
  31. int linelen=right[i][j]-left[i][j]+ ,rowlen=up[i][j];
  32. ans1=max(ans1,sqr(min(linelen,rowlen)));
  33. ans2=max(ans2,linelen*rowlen);
  34. }
  35. else{
  36. ri=j; right[i][j]=m;
  37. }
  38. }
  39. }
  40.  
  41. memset(right,,sizeof(right)); memset(left,,sizeof(left)); memset(up,,sizeof(up));
  42. for(int i=;i<=m;i++) right[][i]=1e9;
  43. for(int i=;i<=n;i++){
  44. left[i][]=; right[i][m]=m;
  45. int le=,ri=m+;
  46. for(int j=;j<=m;j++){
  47. if(!mp[i][j]){
  48. up[i][j]=up[i-][j]+; left[i][j]=max(left[i-][j],le+);
  49.  
  50. }
  51. else{ le=j; }
  52. }
  53.  
  54. for(int j=m;j>=;j--){
  55. if(!mp[i][j]){
  56. right[i][j]=min(ri-,right[i-][j]);
  57. int linelen=right[i][j]-left[i][j]+ ,rowlen=up[i][j];
  58. ans1=max(ans1,sqr(min(linelen,rowlen)));
  59. ans2=max(ans2,linelen*rowlen);
  60. }
  61. else{
  62. ri=j; right[i][j]=m;
  63. }
  64. }
  65. }
  66. printf("%d\n%d",ans1,ans2);
  67.  
  68. return ;
  69. }

【BZOJ】1057 [ZJOI2007]棋盘制作(悬线法)的更多相关文章

  1. BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

    1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...

  2. P1169 [ZJOI2007]棋盘制作 && 悬线法

    P1169 [ZJOI2007]棋盘制作 给出一个 \(N * M\) 的 \(01\) 矩阵, 求最大的正方形和最大的矩形交错子矩阵 \(n , m \leq 2000\) 悬线法 悬线法可以求出给 ...

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

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

  4. P1169 [ZJOI2007]棋盘制作[悬线法/二维dp]

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

  5. P1169 [ZJOI2007]棋盘制作——悬线法

    ---恢复内容开始--- 给你一个矩阵,选出最大的棋盘,棋盘的要求是黑白相间(01不能相邻),求出最大的正方形和矩形棋盘的面积: 数据n,m<=2000; 这个一看就可能是n2DP,但是写不出. ...

  6. [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵

    https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...

  7. P1169 [ZJOI2007]棋盘制作 悬线法or单调栈

    思路:悬线法\(or\)单调栈 提交:2次 错因:正方形面积取错了\(QwQ\) 题解: 悬线法 讲解:王知昆\(dalao\)的\(PPT\) 详见代码: #include<cstdio> ...

  8. BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )

    对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...

  9. 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 753  Solved: 444[Submit][Status][Discuss] D ...

  10. bzoj 1057: [ZJOI2007]棋盘制作 单调栈

    题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 1019[Submit] ...

随机推荐

  1. pybedtools --bedtools的python包

    http://daler.github.io/pybedtools/ 用个下面这个 >>> fn = pybedtools.example_filename('test.fa') & ...

  2. install ros-indigo-map-msgs

    CMake Warning at /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake: (find_package): Could not fi ...

  3. javascript之反柯里化(uncurrying)

    在JavaScript中,当我们调用对象的某个方法时,其实不用去关心该对象原本是否被设计为拥有这个方法,这是动态类型语言的特点.可以通过反柯里化(uncurrying)函数实现,让一个对象去借用一个原 ...

  4. vue双向数据绑定最最最最最简单直观的例子

    vue双向数据绑定最最最最最简单直观的例子 一.总结 一句话总结:双向绑定既不仅model可以影响view的数据,view也可以影响model的数据 view model 数据 1.vue双向数据绑定 ...

  5. Mongo Plugin插件(编辑器PyCharm的Mongo插件安装与使用)

    博主接触到MongoDB数据库.用普通的Navicat工具 是不支持的 正准备重新安装一款对应的可视化工具.刚好发现在PyCharm编辑中有连接mongoDB数据的插件 Mongo Plugin 这里 ...

  6. How To Use Amazon MWS To Download Unshipped Order Reports

    文章来源:http://www.samswiches.com/2011/02/how-to-use-amazon-mws-to-download-unshipped-order-reports/ ac ...

  7. 简述 AJAX 及基本步骤

    简述 AJAX:AJAX即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行 ...

  8. [Java] Eclipse下导入外部jar包的3种方式

    我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3种Eclipse引入jar包的方式.   1.最常用的普通 ...

  9. MIPS 汇编指令学习

    MIPS 寄存器 MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic ...

  10. Linux 需要掌握的一些命令

    详情: 1. tar 创建一个新的tar文件 $ tar cvf archive_name.tar dirname/ 解压tar文件 $ tar xvf archive_name.tar 查看tar文 ...