题目背景

忙完了学校的事,v神终于可以做他的“正事”:陪女朋友散步。一天,他和女朋友走着走着,不知不觉就来到了一个千里无烟的地方。v神正要往回走,如发现了一块牌子,牌子上有有一行小字和一张图,小字说道:“找到图上最大的交错正方形之后和我联系,这块地就是你的了。”在房价疯长的年代,v神当然不愿错过这个机会,于是开始找了起来……以v神的能力当然找不出来了,你能帮v神找出来吗?

题目描述

图上有一个矩阵,由N*M个格子组成,这些格子由两种颜色构成,黑色和白色。请找到面积最大的且内部是黑白交错(即两个相连的正方形颜色不能相同)的正方形。

输入输出格式

输入格式:

第一行两个整数N和M,分别表示行数和列数。接下来有N行,每行M个数,0或1分别表示这个格子是黑色或白色。

输出格式:

仅有一行,表示满足条件最大正方形的 边长

输入输出样例

输入样例#1:

3 3
0 1 0
1 0 0
1 1 1

输出样例#1:

2

说明

样例解释:

(1,1)到(2,2)这个正方形是满足条件的,它的边长是2

数据范围约定:

对于30%的数据,N <= 20
对于60%的数据,N <=300
对于100%的数据,N <= 1500

Solution

这个题和之前的一道题很相似啊...
不过就是有一点点不同.就是原来的单纯是一样的矩形即可.
但这里是 01 矩形.
所以需要一点变化,也就是将 形如 c[i][j] 而且满足 i+j %2==1的,我们将其取反即可转化成和原来一样的形状...
对于这个,自己画个图就可以理解应该.

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1508;
int n,m,ans;
int c[maxn][maxn];
int f[maxn][maxn];
int main()
{ios::sync_with_stdio(false);cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>c[i][j];if ((i+j)&1)c[i][j]=1-c[i][j];}    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(!c[i][j]){f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;ans=max(ans,f[i][j]);}}memset(f,0,sizeof(f));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(c[i][j]){f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;ans=max(ans,f[i][j]);}} //要做两遍,想一想为什么?     cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/Kv-Stalin/p/9161471.html

P1681 最大正方形II (动态规划)相关推荐

  1. 简单的dp P1681 最大正方形II

    题目背景 忙完了学校的事,v神终于可以做他的"正事":陪女朋友散步.一天,他和女朋友走着走着,不知不觉就来到了一个千里无烟的地方.v神正要往回走,如发现了一块牌子,牌子上有有一行小 ...

  2. P1681 最大正方形 Iand II

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  3. POJ 2336 Ferry Loading II 动态规划

    题意:一个渡河问题,船每次最多可以载n辆车,单程渡河的时间是t,有m辆车要渡河,问最少时间把所有车运过河去的时间是多少,这个情况下,最少的运输次数是多少. 分析:确实是动态规划,惭愧我想了很久,也没想 ...

  4. 63. Unique Paths II 动态规划

    description: https://leetcode.com/problems/unique-paths/ 机器人从一堆方格的左上角走到右下角,只能往右或者往下走 ,问有几种走法,这个加了难度, ...

  5. C语言求最大正方形子矩阵,动态规划—统计全为1的正方形子矩阵个数|最大正方形...

    最大正方形 (统计全为 1 的正方形子矩阵) 解析可以参考leetcode解析 public class Solution { public int countSquares(int[][] matr ...

  6. 买卖股票的最大利润II——动态规划、贪心

    题目描述: 给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意: ...

  7. LeetCode Guess Number Higher or Lower II(动态规划)

    问题:从1到 n之间选取一个数字,如果猜了数字x并且猜错了,需要支付金额为x的现金.问至少 需要支付多少 思路:用dp(i,j)表示i到j之间时的最小值.则有dp(i,j)=min{pivot + m ...

  8. LeetCode House Robber II(动态规划)

    问题:给出一个数组,表示房屋内藏有的现金.房屋围成一圈.相邻房间装有防盗系统,如果相邻的房间在同一晚上被偷,系统会自动报警.要求在不触到警报的情况下,能够偷到的最高金额. 思路:因为房屋围成一圈,并且 ...

  9. 106. Leetcode 122. 买卖股票的最佳时机 II (动态规划-股票交易)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]是一个长度为len(prices)的一维数组,表示的是在第i天持有股票 步骤二.推断状态方程: 第i天持有股票,即dp[i][1], 那么两个状态 ...

最新文章

  1. python数据结构与算法:单向循环列表
  2. 快速系统从零学习OpenCV 4路线图
  3. 编译器的普遍翻译步骤
  4. 构造函数的初始化,初始化列表还是大括号里好,那种效率高
  5. mysql中存储引擎是啥_mysql中的存储引擎
  6. 分数阶simulink工具箱_CCDC 2021特别专题:分数阶微积分与分数阶系统
  7. oracle数据类型大小限制
  8. yii---where or该如何使用
  9. [TIPS]数据库 应用软件 MSSMS
  10. 计算机网络资料篇(一)——HTTP
  11. android 控件置于屏幕最底端
  12. tekla钢结构算量_吉林省中润钢结构科技有限公司应用BIM技术助力润德華城项目建设...
  13. leetcode Course Schedule II
  14. 安装及卸载CrossOver for Mac
  15. hibernate教程笔记9
  16. Flash Builder 4.6桌面项目在Flash Builder 4.7中打开遇到的问题
  17. 计算机管理找不到防火墙,电脑没有防火墙怎么办
  18. 给上层添加SuperSu来获取root权限
  19. Unity中的热更新 - Lua和C#通信
  20. 阿里云ACP级认证考试心得+过关经验

热门文章

  1. AcWing 786. 第k个数
  2. 查看linux环境下cudnn是否安装,Linux下安装cuda和对应版本的cudnn
  3. input眼睛显示 vue_2019前端面试题汇总(主要为Vue)
  4. [UVA1374]Power Calculus【迭代加深】
  5. python︱模块加载(pip安装)以及pycharm安装与报错解决方式
  6. 表格开源的数据集FUSD数据集、TableBank数据集、DocBank数据集
  7. JVM系列:生产环境参数实例及分析【生产环境实例增加中】
  8. Struts2 Jakarta远程执行代码测试
  9. 互联网+ 何人能挡?带着你的Code飞奔吧!
  10. 我是怎么找电子书的?