题意:

      给你一个图,让你找到最大的子矩形。

思路:

      之前做过一个最大子矩阵,记得当时是用三种方法做的,两种都是瓶颈法,第三种是dp,结果今天的用瓶颈吧怎么都过不去,哎!不知道为什么,后来没办法有写了和dp顺利ac了,我们求最大子矩阵的时候是记录最大的长*宽,这次只要记录最大的min(长,宽),就行了,说下这个题目的dp做法吧,只要是开三个数组,L[],R[],sum[],sum是记录当前点的上面有多少个连续的1,L是记录当前点sum大于等于左边的最远的那个数的下标(连续大于),R则是又边,则我们可以一边更新sum一边更新L,R和ans,主要核心如下


for(i = 1 ;i <= n ;i ++)

{

   for(j = 1 ;j <= n ;j ++)

   map[i][j] == '.' ? sum[j] ++ : sum[j] = 0;//更新当前点上面有多少个连续1

   //更新当前点左边连续大于的最远

   L[1] = 1;

   for(j = 2 ;j <= n ;j ++)

   {

      int k = j;

      while(k > 1 && sum[j] <= sum[k-1]) k = L[k-1];

      L[j] = k;

   }

  //更新当前点右边连续大于的最远

   R[1] = n;

   for(j = n - 1 ;j >= 1 ;j --)

   {

      int k = j;

      while(k > 1 && sum[j] <= sum[k+1]) k = R[k+1];

      R[j] = k;

   }

  // 更新答案

  for(j = 1 ;j <= n ;j ++)

  {

     int now = min(R[j] - L[j] + 1 ,sum[j]);

     if(ans < now) ans = now;

  }

}  

ok核心就是这些,时间复杂度是O(n^2)


#include<stdio.h>
#include<string.h>

int
L[1111] ,R[1111] ,sum[1000];
int
map[1111][1111]; int minn(int x ,int y)
{
return
x < y ? x : y;
} int main ()
{
int
n ,m ,i ,j;
int
ans ,x ,y;
while(~
scanf("%d %d" ,&n ,&m))
{

memset(map ,255 ,sizeof(map));
memset(sum ,0 ,sizeof(sum));
while(
m--)
{

scanf("%d %d" ,&x ,&y);
map[x][y] = 0;
}
for(
ans = 0 ,i = 1 ;i <= n ;i ++)
{
for(
j = 1 ;j <= n ;j ++)
map[i][j] ? sum[j] ++ : sum[j] = 0;
L[1] = 1;
for(
j = 2 ;j <= n ;j ++)
{
int
k = j;
while(
k > 1 && sum[j] <= sum[k-1]) k = L[k-1];
L[j] = k;
}

R[n] = n;
for(
j = n - 1 ;j >= 1 ;j --)
{
int
k = j;
while(
k < n && sum[j] <= sum[k+1]) k = R[k+1];
R[j] = k;
}
for(
j = 1 ;j <= n ;j ++)
{
int
now = minn(R[j] - L[j] + 1 ,sum[j]);
if(
ans < now) ans = now;
}
}

printf("%d\n" ,ans);
}
return
0;
}

hdu4846 最大子正方形(dp)的更多相关文章

  1. vijos 1057 盖房子 dp 最大子正方形

    P1057盖房子 未递交 标签:[显示标签] 描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的. 但是,这块土地并非十全十美 ...

  2. lintcode:最大子正方形

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

  3. P1387 最大正方形 dp

    思路:  i j的最大正方形等于min(他的斜上方的的最大正方形,他的上方有的连续1,他的左方有的连续1)+1 #include<bits/stdc++.h> using namespac ...

  4. 計蒜客/數正方形(dp)

    題目鏈接:https://nanti.jisuanke.com/t/44 題意:中文題誒~ 思路: 用dp[i][j]存儲以(i, j)爲左上定點的最大正方形變長,從右下角網左上角一次計算所有頂點: ...

  5. [LeetCode] 221. 最大正方形(DP)

    题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 ...

  6. 最大子阵 DP or 前缀和orb暴力 能过

    在一个给定的n*m二维矩阵中求一个子矩阵元素和的最大值. 思路: 1:一个二维矩阵由两个点可以确定,枚举两个点,取子矩阵最大值. 2:在一维矩阵中,求一个序列的最大子段,利用 f[i]=max(f[i ...

  7. 洛谷P1736 创意吃鱼法 dp

    正解:dp 解题报告: 早就想写dp的题目辣!我发现我的dp好差啊QAQ所以看到列表的小朋友写dp的题目就跟着他们的步伐做下题好辣QwQ 这题的话没有那——么难,大概说下趴QwQ 首先说下题意 前面一 ...

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

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

  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

随机推荐

  1. 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历

    剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...

  2. 定西+简单dp

    定西 ECNU-3531 #include<iostream> #include<cstdio> #include<algorithm> #include<c ...

  3. 02----python入门----基本数据类型

    关于数据分类依据 一.数字型(int) Python可以处理任意大小的正负整数,但是实际中跟我们计算机的内存有关,在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,在64位系 ...

  4. Jmeter 分布式架构和服务器性能监控解决方案

    在对项目做大并发性能测试时,常会碰到并发数比较大(比如需要支持10000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能来搭建分布式并发环境 . 一. ...

  5. mongodb为什么比mysql效率高

    首先是内存映射机制,数据不是持久化到存储设备中的,而是暂时存储在内存中,这就提高了在IO上效率以及操作系统对存储介质之间的性能损耗.(毕竟内存读取最快) 其次,NoSQL并不是不使用sql,只是不使用 ...

  6. 模拟实现AMD模块化规范

    目录 引子 再谈什么是闭包(闭包的产生)? 词法作用域 回到闭包 利用闭包编写模块 实现AMD模块化规范 写在最后 引子 本文最后的目的是模拟实现AMD模块化规范,而写下本文的原因是今天阅读到了< ...

  7. DNA序列(JAVA语言)

    package 第三章习题; /*  * 输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量小.  * 两个等长字符串的Hamming距离等于字符不同的位置个数, ...

  8. 攻防世界 reverse 进阶 10 Reverse Box

    攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...

  9. 在Windows下配置Linux远程开发环境

    在Windows下配置Linux远程开发环境 欢迎光临我的个人博客 https://source.chens.life/Configure-Linux-remote-development-envir ...

  10. java例题_01 不死神兔!

    1 /*1 [程序 1 不死神兔] 2 题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 3 程 ...