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;
}

  

最新文章

  1. 如何寻找&ldquo;真爱&rdquo;型合伙人
  2. (10) 深入了解Java Class文件格式(九)
  3. Java中长度为0的数组与null的区别
  4. java 数据绑定的几种方式及相关注意事项-持续更新
  5. 关于SQLSERVER联合查询一点看法
  6. &ldquo;耐撕&rdquo;团队2016.04.14站立会议
  7. hdu 4302 优先队列
  8. vs 异常处理
  9. Linker scripts之Intro
  10. c++实现输入法窗口自定义的代码
  11. Enum枚举类|注解Annotation
  12. 20141127 测试使用Word2013书写博客(代码高亮+公式支持)。
  13. 优秀Java程序员必须了解的GC工作原理(转)
  14. Flask 开发| Flaskr 开发内容总结
  15. Android自定义View(一、初体验自定义TextView)
  16. .Net Remoting 调用远程对象
  17. Nginx geo模块
  18. Consul内部分享ppt
  19. HTML第五章总结
  20. Spring-framework应用程序启动loadtime源码分析笔记(一)

热门文章

  1. EnableViewState
  2. scrapy1_官网教程
  3. 9月5日网页基础知识 通用标签、属性(body属性、路径、格式控制) 通用标签(有序列表、无序列表、常用标签)(补)
  4. 初识Python类
  5. Which is the best opencv or matlab for image processing?
  6. 深入浅出JMS(一)--JMS基本概念
  7. display : -webkit-box-inline 我见
  8. Javascript设计模式详解
  9. [译]git rebase -i
  10. python 100例 (持续更新)