传送门

搞不清楚为什么这一题要DP . . . . . .

思路:

  • \(n\le100\),考虑暴力。
  • 要求一大块区间内都是1,考虑前缀和。
  • 在矩阵中求一个符合条件的子矩阵,考虑\(n^3\)的“压行”做法。

具体实现:

  • 读入时,先记录每一层的前缀和,再把上一次的前缀和加进来。
  • \(n^2\)枚举正方形的上界和下界,顶着上界下界\(O(n)\)扫描记录答案。
  • 若当前的上界下界的距离\(\le ans\)跳过

直接上代码。用了宏定义和快读,但很好理解,初学者都能一眼就懂..

#include<iostream>
#include<cstring>
#include<queue>
#include<cstdlib>
#include<vector>
#include<set>
#include<map>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<bitset>
#include<ctime>
using namespace std; #define TMP template < class ins >
#define endl '\n'
#define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;t++)
#define ERP(t,a) for(register int t=head[(a)];t;t=e[t].nx)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;t--)
typedef long long ll; TMP inline ins qr(ins tag){
char c=getchar();
ins x=0;
int q=0;
while(c<48||c>57)
q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)
x=x*10+c-48,c=getchar();
return q==-1?-x:x;
}
const int maxn=105;
int data[maxn][maxn];
int sum[maxn][maxn];
int n,m;
int ans; inline void init(){
n=qr(1);
m=qr(1);
RP(t,1,n){
RP(i,1,m)
sum[t][i]=(data[t][i]=qr(1))+sum[t][i-1];
//记录当前行前缀和
RP(i,1,m)
sum[t][i]+=sum[t-1][i];
//把上一行前缀和加进来
}
return;
} inline bool jde(int x1,int y1,int x2,int y2){
int cmp=(abs(x1-x2)+1)*(abs(y1-y2)+1);
//计算面积
int sttd=sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
//(x1-1,y1-1)到(1,1)的矩阵被减了两次,要补偿回来
return cmp==sttd;
} inline void eff(){
RP(t1,1,n){//枚举上界
RP(t2,t1,n){//枚举下界
int k=t2-t1+1;
//计算当前上下界对应的正方形大小
if(k<=ans)
continue;
//最优性剪枝
RP(t,k,m)//扫描一遍,
if(jde(t1,t-k+1,t2,t)){
ans=k;break;
//可以直接记录答案,因为前面已经最优性剪枝了
}
}
}
cout<<ans<<endl;
} int main(){
#define debugged
#ifdef debug
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
init();
eff();
return 0;
}

题解 P1387 【最大正方形】的更多相关文章

  1. P1387 最大正方形&&P1736 创意吃鱼法

    P1387 最大正方形 P1736 创意吃鱼法 两道类似的$DP$ 转移方程基本上类似于$f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))$ 考虑构成 ...

  2. 洛谷 p1387最大正方形

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

  3. 洛谷P1387 最大正方形

    题目描述 题目链接:https://www.luogu.org/problemnew/show/P1387 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输 ...

  4. P1387 最大正方形

    2018-08-16 https://www.luogu.org/problemnew/show/P1387 题意: 略. 4 4 0 0 1 1      把这个翻译成dp的形式   0 0 1 1 ...

  5. 洛谷 P1387 最大正方形 【dp】(经典)

    题目链接:https://www.luogu.org/problemnew/show/P1387 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入格式: 输入 ...

  6. P1387 最大正方形 && P1736 创意吃鱼法(DP)

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

  7. 洛谷 P1387 最大正方形 Label:奇怪的解法

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

  8. 洛谷 [P1387] 最大正方形

    本题非常有趣. (n^6) 枚举四个端点,每次遍历矩阵求解. (n^4) 先处理前缀和,枚举四个端点,每次比较前缀和和正方形面积. (n^3) 枚举左上方端点,在枚举边长,前缀和优化 (n^2logn ...

  9. P1387 最大正方形 dp

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

随机推荐

  1. bzoj 5056: OI游戏

    5056: OI游戏 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 204  Solved: 162[Submit][Status][Discuss] D ...

  2. mysql之日期函数

    写在前面 mysql的学习,断断续续,今天就接着学习mysql的日期操作吧. 系列文章 mysql之创建数据库,创建数据表 mysql之select,insert,delete,update mysq ...

  3. Java 的几种版本

    1. Java ME Java ME(Java 2 Micro Edition),是为机顶盒.移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API. ...

  4. 修改密码删除登陆态,那其他正在登陆的app怎么办?

    修改密码删除登陆态,那其他正在登陆的app怎么办?

  5. Android属性动画:动画流控制

    今天的文章里,我将会和大家讨论对动画流的控制.我们可以通过Animator系列的API来控制动画的开始.停止和取消.在 KitKat也就是API level 19中,我们还可以控制动画的暂停和恢复.在 ...

  6. 11.【nuxt起步】-登录验证

    1.新建/pages/login.vue 2.安装cookie Cnpm install js-cookie --s 3.Login.vue增加 import Cookie from 'js-cook ...

  7. 线程安全的概念和Synchronized(读书笔记)

         并行程序开发的一大关注重点就是线程安全,一般来说,程序并行化为了获取更多的执行效率,但前提是,高效率不能以牺牲正确性为代价,线程安全就是并行程序的根本和根基.volatile并不能真正保证线 ...

  8. es6 - 导入导出

    今天用node纠结了半天,明明是正确的语法,一直报错,原来node和chrome并不支持es6语法.... 1. npm install package.json { "name" ...

  9. tomcat启动出现异常 Error filterStart

    tomcat启动中出现 Error filterStart异常, 没有任何堆栈信息,如下: SEVERE: Error filterStart Jul 6, 2012 3:39:05 PM org.a ...

  10. Mongo JavaTest

    import com.mongodb.MongoClient; import com.mongodb.DB; import com.mongodb.DBCollection; import com.m ...