BZOJ 1057: [ZJOI2007]棋盘制作
2024-09-12 07:53:02
Decsription
给你一个矩阵,求最大了 01相间 的矩阵.
Sol
DP+悬线法.
这是一个论文啊 《浅谈用极大化思想解决最大子矩形问题》--王知昆.
枚举每一根悬线,记录最左/右/上能到达的点,统计答案.
Code
/**************************************************************
Problem: 1057
User: BeiYu
Language: C++
Result: Accepted
Time:1384 ms
Memory:95508 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; #define sqr(x) ((x)*(x))
const int N = 2005; int n,m,ans1,ans2;
int a[N][N],f[N][N],pre[N][N],nxt[N][N],L[N][N],R[N][N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9' || ch<'0') ch=getchar();
while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
void work(){
memset(nxt,0,sizeof(nxt)),memset(pre,0,sizeof(pre));
for(int i=1;i<=n;i++){
pre[i][1]=1,nxt[i][m]=m;
for(int j=2;j<=m;j++){
if(a[i][j]^a[i][j-1]) pre[i][j]=pre[i][j-1];
else pre[i][j]=j;
}for(int j=m-1;j;--j){
if(a[i][j]^a[i][j+1]) nxt[i][j]=nxt[i][j+1];
else nxt[i][j]=j;
}
}
for(int j=1;j<=m;j++) f[1][j]=1,L[1][j]=pre[1][j],R[1][j]=nxt[1][j],ans1=max(ans1,(R[1][j]-L[1][j]+2)),ans2=max(ans2,1);
for(int i=2;i<=n;i++) for(int j=1;j<=m;j++){
if(a[i][j]^a[i-1][j]){
f[i][j]=f[i-1][j]+1;
L[i][j]=max(pre[i][j],L[i-1][j]);
R[i][j]=min(nxt[i][j],R[i-1][j]);
}else{
f[i][j]=1;
L[i][j]=pre[i][j];
R[i][j]=nxt[i][j];
}
ans1=max(ans1,f[i][j]*(R[i][j]-L[i][j]+1));
ans2=max(ans2,sqr(min(f[i][j],R[i][j]-L[i][j]+1)));
}
// for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) printf("%d%c",pre[i][j]," \n"[j==m]);
// for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) printf("%d%c",nxt[i][j]," \n"[j==m]);
}
int main(){
n=in(),m=in();
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=in();
work();
cout<<ans2<<endl<<ans1<<endl;
return 0;
}
最新文章
- 如何寻找&ldquo;真爱&rdquo;型合伙人
- (10) 深入了解Java Class文件格式(九)
- Java中长度为0的数组与null的区别
- java 数据绑定的几种方式及相关注意事项-持续更新
- 关于SQLSERVER联合查询一点看法
- &ldquo;耐撕&rdquo;团队2016.04.14站立会议
- hdu 4302 优先队列
- vs 异常处理
- Linker scripts之Intro
- c++实现输入法窗口自定义的代码
- Enum枚举类|注解Annotation
- 20141127 测试使用Word2013书写博客(代码高亮+公式支持)。
- 优秀Java程序员必须了解的GC工作原理(转)
- Flask 开发| Flaskr 开发内容总结
- Android自定义View(一、初体验自定义TextView)
- .Net Remoting 调用远程对象
- Nginx geo模块
- Consul内部分享ppt
- HTML第五章总结
- Spring-framework应用程序启动loadtime源码分析笔记(一)
热门文章
- EnableViewState
- scrapy1_官网教程
- 9月5日网页基础知识 通用标签、属性(body属性、路径、格式控制) 通用标签(有序列表、无序列表、常用标签)(补)
- 初识Python类
- Which is the best opencv or matlab for image processing?
- 深入浅出JMS(一)--JMS基本概念
- display : -webkit-box-inline 我见
- Javascript设计模式详解
- [译]git rebase -i
- python 100例 (持续更新)