奇怪的DP增加了

这道题,刚看见真是一脸懵逼,看了题解才明白。

本题中神奇的转移方程是:
f[i][j]=min(min(f[i][j−1],f[i−1][j]),f[i−1][j−1])+1f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1f[i][j]=min(min(f[i][j−1],f[i−1][j]),f[i−1][j−1])+1

其中f[i][j]f[i][j]f[i][j]表示的是以 iii 行 jjj 列这个点为右下角,所能构成的正方形的最大边长。
只有当这个点是1的时候才能组成正方形,才能去更新 fff 数组。
若fff 数组:

?  ?  ?  ?
?  ?  2  1
?  ?  3  ?
?  ?  ?  ?

则说明原矩阵为:

1  1  1  0
1  1  1  1
1  1  1  1
?  ?  ?  ?

用 ansansans 来找最大的f[i][j]f[i][j]f[i][j]即可。
代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2000+7;
const ll mod=100000000;
ll n,m,f[N][N],a,ans;
int main()
{scanf("%lld %lld",&n,&m);for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){scanf("%lld",&a);if(a)f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;#如果是0就直接为1了新开一个正方形ans=max(ans,f[i][j]);}printf("%lld\n",ans);return 0;
}

同样这道矩阵可以用二维前缀和来做主要是为了练习一下二位前缀和,还不如DP呢

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
#define over(i,s,t) for(int i=s;i<=t;++i)
#define lver(i,t,s) for(int i=t;i>=s;--i)
using namespace std;
typedef long long ll;
const ll N=3e3+7;
const ll INF=1e13+7;
const ll mod=2147483647;
const double EPS=1e-6;
ll n,m;
ll a[N][N],b[N][N];
int main()
{scanf("%lld%lld",&n,&m);over(i,1,n) over(j,1,m){scanf("%lld",&a[i][j]);b[i][j]=b[i][j-1]+b[i-1][j]-b[i-1][j-1]+a[i][j];//二维前缀和}ll ans=1;ll l=1;while(l<=min(n,m)){over(i,l,n)over(j,l,m){if(b[i][j]-b[i-l][j]-b[i][j-l]+b[i-l][j-l]==l*l)ans=max(ans,l);}l++;}printf("%lld\n",ans);return 0;
}

【每日DP】day3 P1387 最大正方形(奇怪的DP增加了 / 二维前缀和)难度⭐⭐★相关推荐

  1. [蓝桥杯 2018 国 B] 搭积木 (区间dp + 二维前缀和优化)

    原题链接(洛谷) 题目描述 小明对搭积木非常感兴趣.他的积木都是同样大小的正立方体. 在搭积木时,小明选取 m m m 块积木作为地基,将他们在桌子上一字排开,中间不留空隙,并称其为第 0 0 0 层 ...

  2. #798. 徐老师的二维动规(二维前缀和优化+dp)

    考虑进行 DP,记 dp[i][j] 为 (1, 1) 到 (i, j) 的方案数,此时暴力求dp的复杂度为 O(WHK^2) ,可以通过 70分的数据.注意到转移的本质其实就是子矩阵求和,用二维前缀 ...

  3. 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】

    [HNOI2003]激光炸弹 题目描述  一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...

  4. 输出螺旋数字正方形java_Java实现顺时针输出螺旋二维数组的方法示例

    最近看到一道有点意思的逻辑算法题,便着手实现一下.题目是要求打印 出N*N顺时针螺旋数组,规律如下: // 1 2 3 4 5 // 16 17 18 19 6 // 15 24 25 20 7 // ...

  5. 不止代码:ybtoj-棋盘分割(二维区间dp)

    题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了n-1次后,连同最后剩下的矩形棋盘共有n块矩形棋盘. (每次切割都只能沿着棋 ...

  6. LeetCode 2132. 用邮票贴满网格图(DP/二维差分)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 m x n 的二进制矩阵 grid ,每个格子要么为 0 (空)要么为 1 (被占据). 给你邮票的尺寸为 stampHeight x stam ...

  7. 理想的正方形 HAOI2007(二维RMQ)

    理想的正方形 省队选拔赛河南  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master       题目描述 Description 有一个a*b的整数组成的矩阵,现 ...

  8. P2380 狗哥采矿 (二维dp)

    原题链接:狗哥采矿 - 洛谷 思路:我一开始想的是,一个点往左走还是往上走与 它上面和左边的点走的方向有关系,但是感觉复杂交错.....然后看到了大佬的二维dp,其实Aij往左走,就让它左边的这一条都 ...

  9. 【每日一题】最大正方形面积——进阶,矩形面积

    2020/05/08 每日一题 221 最大正方形面积 是一道做过的题目出现在了每日一题,今后的每日一题我尽量把相关的题目都写一遍. 这道题目的思路并不是看到01矩阵就采用暴力的bfs方法,而是可以采 ...

最新文章

  1. 病毒软件,导致DNS失效的解决办法
  2. 【Python基础】Pandas笔记---概述与数据结构
  3. Makefile的学习
  4. 电力系统潮流计算matlab程序,大神们,求个电力系统潮流计算的matlab程序。
  5. 飞秋2010下载在未来讲差异化
  6. 酷客多郝宪玮:不够小程序化的企业,将错失最近5年的流量红利
  7. 算法:螺旋矩阵算出N行N列的数组Spiral Matrix II
  8. HeadFirst设计模式-工厂模式(基于汽车工厂和手机工厂)
  9. 私有云 公有云 社区云 混合云 专有云
  10. 在 Windows 10 中如何查看系统的激活状态?
  11. python re span_python—模块-re正则表达式
  12. 【STM32学习】(30)STM32实现18B20温度采集(标准库和HAL库实现)
  13. Solid Sphere Inc.:智能手机原创恶搞App“Takeshobo Quest - POP TEAM EPIC ASSAULTS”
  14. 机器学习笔记 十五:随机森林(Random Forest)评估机器学习模型的特征重要性
  15. Elasticsearch 集群内应该设置多少个分片(shard)?
  16. mysql geo_地理位置geo处理之mysql函数
  17. 唐山初中计算机考试知识点,唐山:2017小升初英语必考的十个知识点(推荐)...
  18. Mybatis的批量插入的正确姿势
  19. 计算机技术创新型,面向企业需求的创新型计算机技术专业硕士胜任力模型研究.docx...
  20. 小孩学python有意义吗-让中小学生学习编程有什么意义

热门文章

  1. 你还在为了进高校做教师而读博吗?
  2. react中试用leaflet简单起步
  3. 使用 bcp 指定数据文件中的前缀长度
  4. Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
  5. 扒一扒.net、.net framework、mono和Unity
  6. 菜鸟学Linux 第044篇笔记 算法和私有CA
  7. sqlite3 解决并发读写冲突的问题
  8. Android java传递string类型数据给C
  9. 10hibernate_one2many_1
  10. python3 x完全兼容_【转】Python3.x与Python2.x的主要区别 (O_O )?