Largest Square

题目链接: link.
Given a matrix (H × W) which contains only 1 and 0, find the area of the largest square matrix which only contains 0s.

Input
H W
c1,1 c1,2 … c1,W
c2,1 c2,2 … c2,W
:
cH,1 cH,2 … cH,W
In the first line, two integers H and W separated by a space character are given. In the following H lines, ci,j, elements of the H × W matrix, are given.

Output
Print the area (the number of 0s) of the largest square.

Constraints
1 ≤ H, W ≤ 1,400
Sample Input
4 5
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
0 0 0 1 0
Sample Output
4
题意: 给一个H×W个边长为1的正方形瓷砖排列在一起,0代表瓷砖干净,1代表瓷砖有污渍,输出仅有干净瓷砖构成的最大正方形的面积。
思路: 用dp(i,j)来表示从瓷砖(i,j)向左上方扩展可形成的最大正方形的边长(瓷砖数),那么要知道dp(i,j)就要知道dp(i-1,j)、dp(i,j-1)和dp(i-1,j-1)三个值,也就是左上方、上方、左侧的最大正方形的值。
因为dp[i][j]以右下角向左上角扩展形成最大正方形能向外拓展的最大长度,取决于那条边最先碰到1(有污渍的瓷砖),而这就需要 d p ( i − 1 , j ) dp(i-1,j) dp(i−1,j)(左延伸)、 d p ( i , j − 1 ) dp(i,j-1) dp(i,j−1)(上延伸)和dp ( i − 1 , j − 1 ) (i-1,j-1) (i−1,j−1)(斜着延伸)算出来的值,来取最小值,最小值,代表最先碰到有污渍的瓷砖,一碰有污渍的瓷砖就无法再往外拓展了。
当前dp[i][j]如果是有污渍的瓷砖,就无法形成正方形,直接赋值为0即可。
(明明是找最大正方形,方程确实最小值,着实有点反直觉
综上所述,动态转移方程就是:
d p [ i ] [ j ] = m i n ( d p [ i − 1 ] [ j − 1 ] , m i n ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) ) + 1 dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1 dp[i][j]=min(dp[i−1][j−1],min(dp[i−1][j],dp[i][j−1]))+1

      //动态转移的核心
for(int i=1;i<H;i++) {for(int j=1;j<W;j++) {if(g[i][j]==1) { dp[i][j]=0;}else {dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;res=max(res,dp[i][j]); //找最大边长(最大面积)}}}
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 1411;int dp[N][N], g[N][N];int solve(int H, int W) {int res = 0;for (int i = 0; i < H; i++) {for (int j = 0; j < W; j++) {dp[i][j] = (g[i][j] + 1) % 2;res |= dp[i][j];}}for (int i = 1; i < H; i++) {for (int j = 1; j < W; j++) {if (g[i][j] == 1) {dp[i][j] = 0;} else {dp[i][j] =min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1;res = max(res, dp[i][j]);}}}return res * res;
}
int main() {int H, W;scanf("%d%d", &H, &W);for (int i = 0; i < H; i++) {for (int j = 0; j < W; j++) {scanf("%d", &g[i][j]);}}printf("%d\n", solve(H, W));return 0;
}

To be continued
如果你有任何建议或者批评和补充,请留言指出,不胜感激

Largest Square相关推荐

  1. 洛谷 P2867 [USACO06NOV]大广场Big Square

    P2867 [USACO06NOV]大广场Big Square 题目描述 Farmer John's cows have entered into a competition with Farmer ...

  2. 【动态规划】leetcode - Maximal Square

    称号: Maximal Square Given a 2D binary matrix filled with 0's and 1's, find the largest square contain ...

  3. 【LeetCode从零单排】No221.Maximal Square

    题目 Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ...

  4. Maximal Square 我们都在寻找最高1子矩阵(leeCode)

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  5. 【二分+二维前缀和】Largest Allowed Area

    Largest Allowed Area 时间限制: 1 Sec  内存限制: 128 MB 提交: 146  解决: 54 [提交] [状态] [命题人:admin] 题目描述 A company ...

  6. [leetcode ]221. Maximal Square c语言

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ...

  7. POJ3251 Big Square【水题】

    Big Square Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6173 Accepted: 1188 Descriptio ...

  8. [Swift]LeetCode221. 最大正方形 | Maximal Square

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  9. LeetCode 221. Maximal Square (最大正方形)

    原题 Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and ...

最新文章

  1. 在CSS中定义a:link、a:visited、a:hover、a:active顺序
  2. ActFramework 小贴士 - 获得应用版本
  3. java6.2免费下载_jasperreports(Java开源报表系统)
  4. ansible 介绍
  5. Python函数内置函数
  6. 剑指offer之树的子结构
  7. 多路查找树之2-3树的删除原理
  8. 计算机审计风险背景,计算机环境下审计风险的特征与对策研究 毕业论文.doc
  9. 在Python中执行JavaScript代码并进行数据交换
  10. sqlexception: default 和 null 不允许作为显式标识值_我都把MySql啃得这么透彻了,你还不进来看一下吗?...
  11. NSURLErrorDomain 对照
  12. Learning SQL2
  13. 团队-团队编程项目作业-开发环境搭建过程
  14. python 抓取百度音乐
  15. 论文笔记_S2D.04-2011-CVPR-对象立体化-联合立体匹配与对象分割
  16. 魔方机器人设计中的问题
  17. 区块链钱包之ETH钱包生成
  18. 电路分析 基础 电容和电感元件
  19. 阿里巴巴程序员常用的 15 款开发者工具!你知道几个?
  20. MAC的delete键与Windows的对应关系

热门文章

  1. 我96年,挑战月入8W”:不是你不会掙銭,而是你的方式有问题!!
  2. linux 无法远程连接解决方法
  3. 理解CPU steal time
  4. HOWTO:通过 VBA 自定义 Office 助手
  5. 关于web端漏洞及安全性问题的浅谈
  6. win7,win10创建移动热点
  7. 外贸干货分享:开发新客户能用哪些邮件?
  8. 锻炼思维,提高智力的方法
  9. 闲鱼副业卖什么比较好?闲鱼无货源卖什么产品好?
  10. 《跨界杂谈》华为印象之混搭儿(七)泳装