hdu 2870 Largest Submatrix
来源:互联网 发布:linux java安装 编辑:程序博客网 时间:2024/04/27 14:05
题意略。
是hdu 1505 的变形,先将所有能变的都变,得到一个没有w、x、y、z的矩阵。
然后就是重复1505的做法了,求三次,取最大值。
#include<cstdio>#include<iostream>#include<cstring>using namespace std;char mp[1005][1005];char w[1005][1005];int t[1005][1005];int le[1005],ri[1005];int m,n,ans,tmp;void solve(char key,char a,char b,char c){ for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(mp[i][j]==a || mp[i][j]==b || mp[i][j]==c) w[i][j]=key; else w[i][j]=mp[i][j]; } } memset(t,0,sizeof(t)); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(w[i][j]==key) t[i][j]=t[i-1][j]+1; else t[i][j]=0; } } for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) le[j]=ri[j]=j; for(int j=2;j<=n;j++) { while(le[j]>1 && t[i][j]<=t[i][le[j]-1]) le[j]=le[le[j]-1]; } for(int j=n-1;j>=1;j--) { while(ri[j]<n && t[i][j]<=t[i][ri[j]+1]) ri[j]=ri[ri[j]+1]; } for(int j=1;j<=n;j++) { tmp=t[i][j]*(ri[j]-le[j]+1); if(tmp>ans) ans=tmp; } }}int main(){ while(scanf("%d%d",&m,&n)!=EOF) { memset(mp,0,sizeof(mp)); ans=-1; for(int i=1;i<=m;i++) scanf("%s",mp[i]+1); solve('a','w','y','z'); solve('b','w','x','z'); solve('c','x','y','z'); printf("%d\n",ans); } return 0;}
0 0
- HDU 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- HDU--2870--Largest Submatrix
- hdu 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- HDU - 2870 Largest Submatrix
- hdu 2870 - Largest Submatrix
- HDU 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- HDU 2870 Largest Submatrix -
- HDU 2870 Largest Submatrix
- hdu 2870 Largest Submatrix
- hdu 2870 Largest Submatrix (dp)
- Largest Submatrix - HDU 2870 dp
- 算法设计之勇士都恶龙
- tableView Header view 自动调整高度
- vb滚轮
- Cocos2d-x 内存管理,对象构造,坐标情况,容器使用
- 队列基础 卡片游戏
- hdu 2870 Largest Submatrix
- 电脑内存常见问题处理方法
- HDU2000
- iOS 获取音频或是视频的时间
- Android 入门,基本环境搭建
- 结构体能否有函数成员
- 开放平台中oauth认证中请求参数签名的算法
- Linux 查看系统硬件信息(实例详解)
- Haloband:计步器?它是NFC手环!