hdu 4328
来源:互联网 发布:mysql 拼接字符串函数 编辑:程序博客网 时间:2024/06/05 21:16
题目
求颜色全为红的矩形周长和颜色全为蓝的矩形周长和颜色交替的矩形周长,输出周长最大值.
类似于hdu1505,求满足条件的最大子矩阵,在处理颜色交替时,判断条件加一个颜色比较就行了.
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int t,n,m;char s[1002][1002];int rr[1002][1002],b[1002][1002],rb[1002][1002];//rr[i][j],以第i行,第j列为顶边的红色矩形的高,(i,j从1开始)int r[1002],l[1002];int main(){ int ca=1; scanf("%d",&t); while(t--) { memset(rr,0,sizeof(rr)); memset(b,0,sizeof(b)); memset(br,0,sizeof(br)); memset(rb,0,sizeof(rb)); memset(s,0,sizeof(s)); scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",s[i]); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(s[i-1][j-1]=='R') rr[i][j]=rr[i][j-1]+1; else rr[i][j]=0; if(s[i-1][j-1]=='B') b[i][j]=b[i][j-1]+1; else b[i][j]=0; if(j==1) rb[i][j]=1; else if(j>1) { if(s[i-1][j-1]!=s[i-1][j-2]) rb[i][j]=rb[i][j-1]+1; else rb[i][j]=1; } } } int ans=0; for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { l[i]=r[i]=i; } for(int i=1;i<=n;i++) { while(b[i][j]<=b[l[i]-1][j]&&l[i]>=1&&b[i][j]>0) l[i]=l[l[i]-1]; } for(int i=n;i>=1;i--) { while(b[i][j]<=b[r[i]+1][j]&&r[i]<=n&&b[i][j]>0) r[i]=r[r[i]+1]; } for(int i=1;i<=n;i++) ans=max(ans,b[i][j]*2+(r[i]-l[i]+1)*2); } for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { l[i]=r[i]=i; } for(int i=1;i<=n;i++) { while(rr[i][j]<=rr[l[i]-1][j]&&l[i]>=1&&rr[i][j]>0) l[i]=l[l[i]-1]; } for(int i=n;i>=1;i--) { while(rr[i][j]<=rr[r[i]+1][j]&&r[i]<=n&&rr[i][j]>0) r[i]=r[r[i]+1]; } for(int i=1;i<=n;i++) ans=max(ans,rr[i][j]*2+(r[i]-l[i]+1)*2); } for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { l[i]=r[i]=i; } for(int i=1;i<=n;i++) { while(rb[i][j]<=rb[l[i]-1][j]&&l[i]>=1&&s[l[i]-1-1][j-1]!=s[l[i]-1][j-1]) l[i]=l[l[i]-1]; } for(int i=n;i>=1;i--) { while(rb[i][j]<=rb[r[i]+1][j]&&r[i]<=n&&s[r[i]+1-1][j-1]!=s[r[i]-1][j-1]) r[i]=r[r[i]+1]; } for(int i=1;i<=n;i++) ans=max(ans,rb[i][j]*2+(r[i]-l[i]+1)*2); } printf("Case #%d: %d\n",ca++,ans); }}
- HDU 4328
- hdu 4328
- hdu 4328 (悬线法+dp)
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- Android中Activity启动模式详解
- jquery离开页面检测修改提示保存
- 《深入理解计算机系统》--异常控制流
- 程序猿应该了解的内容以及程序猿如何强迫自己学习(思考篇)
- Xcode学习笔记---Xcode3与Xcode4的区别
- hdu 4328
- jsp study 4 操作符
- 热部署 和 在myecipse 中远程调试
- Eclipse中最有用的快捷键组合
- soft thresholding and hard thresholding
- 2014小米校园招聘笔试(10.13北京)
- 简单的死锁例子
- java解析xml的四种方法
- Java基础重温(七)java中hashcode()和equals(),equals()与==