题意:

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

思路:

      之前做过一个最大子矩阵,记得当时是用三种方法做的,两种都是瓶颈法,第三种是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. 快速电路仿真器(FastSPICE)中的高性能矩阵向量运算实现

    今年10-11月份参加了EDA2020(第二届)集成电路EDA设计精英挑战赛,通过了初赛,并参加了总决赛,最后拿了一个三等奖,虽然成绩不是很好,但是想把自己做的分享一下,我所做的题目是概伦电子出的F题 ...

  2. Boltdb学习笔记之〇--概述

    更多精彩内容,请关注微信公众号:后端技术小屋 看了boltdb也有一阵子了,看完之后总想写点什么,因为感觉到这可能是个不小的坑,所以迟迟没有动笔(没错我的拖延症又犯了..).最近有一种流行的说法:如果 ...

  3. Maven基础&&Spring框架阶段常用工具类整理

    常用工具类 1.密码加密工具类: package com.itheima.utils; import java.security.MessageDigest; import sun.misc.BASE ...

  4. WPF 基础 - DataTemplate 和 ControlTemplate 的关系和应用

    1. 关系 凡是 Template,最后都得作用到 控件 上,这个控件就是 Template 的目标控件(也称模板化控件): DataTemplate 一般是落实在一个 ContentPresente ...

  5. NET 5.0 Swagger API 自动生成MarkDown文档

    目录 1.SwaggerDoc引用 主要接口 接口实现 2.Startup配置 注册SwaggerDoc服务 注册Swagger服务 引用Swagger中间件 3.生成MarkDown 4.生成示例 ...

  6. codefoces D. Phoenix and Science

    原题链接:https://codeforc.es/problemset/problem/1348/D 题意:给你一个体重为一克的细菌(它可以每天进行一次二分裂即一分为二体重均分:晚上体重增加1克)求最 ...

  7. [差分][二分][贪心]luogu P3634 [APIO2012]守卫

    题面 https://www.luogu.com.cn/problem/P3634 给m个限制,可以是一段区间中必须有或者必须无忍者 最多有k个忍者,问有多少个位点一定有忍者 分析 首先用差分标记一下 ...

  8. java集合【12】——— ArrayList,LinkedList,Vector的相同点与区别是什么?

    目录 特性列举 底层存储结构不同 线程安全性不同 默认的大小不同 扩容机制 迭代器 增删改查的效率 总结一下 要想回答这个问题,可以先把各种都讲特性,然后再从底层存储结构,线程安全,默认大小,扩容机制 ...

  9. java中if语句的应用

    1. 注释怎么写: 1.1  //单行注释 1.2  /*多行注释*/ 2. If语句的用法 2.1. if(条件语句){ (  ps:只有一行代码时可以不加{}  ) } 2.2. if(条件语句) ...

  10. 在M1芯片的Mac系统上做.net core开发靠谱吗?

    作为一个7年老.NET程序员,最近几年苹果慢慢接替微软,成为我心中最酷的科技公司. 为什么我会选择Mac os作为我的开发环境? 很多做.net的同学都使用Windows系统作为自己的开发环境,我其实 ...