HDU 2870 Largest Submatrix(dp最大子矩阵和)
来源:互联网 发布:js input value 赋值 编辑:程序博客网 时间:2024/05/22 06:41
1505,1506的加强版,这里一共有三种情况,一开始想的是dp的时候变幻,但是那样根本不可能,所以要预处理,不同种的组合如果旁边和自己的种类不一样,那么旁边的高度就是0,想到这个就可以开a,b,c三个数组纪录高度,如果i是a,那么a数组有值,i两边都不是a或者不能变幻为a,那么高度是0,就可以转化成1505一样的了。
</pre><pre name="code" class="cpp">//// main.cpp// Richard//// Created by 邵金杰 on 16/9/14.// Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000+10;int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];int la[maxn],ra[maxn],lb[maxn],rb[maxn],lc[maxn],rc[maxn];char s[maxn][maxn];int n,m;void change(){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(s[i][j]=='a'||s[i][j]=='w'||s[i][j]=='y'||s[i][j]=='z') a[i][j]=1+a[i-1][j]; if(s[i][j]=='b'||s[i][j]=='w'||s[i][j]=='x'||s[i][j]=='z') b[i][j]=1+b[i-1][j]; if(s[i][j]=='c'||s[i][j]=='x'||s[i][j]=='y'||s[i][j]=='z') c[i][j]=1+c[i-1][j]; } }}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { int MAX=-1; for(int i=1;i<=n;i++) scanf("%s",s[i]+1); change(); for(int i=1;i<=n;i++) { la[1]=lb[1]=lc[1]=1; ra[m]=rb[m]=rc[m]=m; for(int j=2;j<=m;j++) { int t=j; while(t>1&&a[i][t-1]>=a[i][j]) t=la[t-1]; la[j]=t; t=j; while(t>1&&b[i][t-1]>=b[i][j]) t=lb[t-1]; lb[j]=t; t=j; while(t>1&&c[i][t-1]>=c[i][j]) t=lc[t-1]; lc[j]=t; } for(int j=m-1;j>=1;j--) { int t=j; while(t<m&&a[i][t+1]>=a[i][j]) t=ra[t+1]; ra[j]=t; t=j; while(t<m&&b[i][t+1]>=b[i][j]) t=rb[t+1]; rb[j]=t; t=j; while(t<m&&c[i][t+1]>=c[i][j]) t=rc[t+1]; rc[j]=t; } for(int j=1;j<=m;j++) { MAX=max(MAX,(ra[j]-la[j]+1)*a[i][j]); MAX=max(MAX,(rb[j]-lb[j]+1)*b[i][j]); MAX=max(MAX,(rc[j]-lc[j]+1)*c[i][j]); } } cout<<MAX<<endl; } return 0;}
0 0
- HDU 2870 Largest Submatrix(dp最大子矩阵和)
- HDU 2870 Largest Submatrix DP求最大子矩阵
- HDU 2870 Largest Submatrix (最大子矩阵)
- Largest Submatrix-最大子矩阵-HDU-2870
- 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 最大01矩阵)(2009 Multi-University Training Contest 7 )
- hdu 2870 Largest Submatrix (dp)
- Largest Submatrix - HDU 2870 dp
- HDU 2870 Largest Submatrix(DP)
- hdu 2870 Largest Submatrix (DP)
- HDU 2870 Largest Submatrix(DP)
- HDU 2870 Largest Submatrix (最大子矩形面积)
- 【DP+预处理|最长连续子序列】HDU-2870 Largest Submatrix
- linux, bsd
- base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUTFChars' could no
- MapperScannerConfigurer在mybatis-spring的妙用
- POJ 3080 Blue Jeans【多串最长子串】
- 基于bootstrap table分页数据及行内编辑和导出数据(二)导出数据
- HDU 2870 Largest Submatrix(dp最大子矩阵和)
- Python中re(正则表达式)模块学习
- 使用jquery的ajax需要注意的地方dataType的设置 (目前我也不是很清楚哎)
- Android 中的线程是如何调度
- jQuery隐藏显示
- beego结合bootstrap table和x-editable用于merit价值和成果管理系统
- ubuntu 关闭防火墙命令(Django搭建web,局域网内所有主机可访问)
- mysql-5.7 解压版安装
- doxygen把stm32的代码转换成文档的教程(1)