HDU 2830 最大完全矩阵
2012-08-29 15:07
225 查看
联系1505,1506, 2870
最大完全子矩阵,以第i行为底,可以构成的最大矩阵,因为该题可以任意移动列,所以只要大于
等于 a[i][j]的都可以移动到一起,求出 a[i][k]>=j(0<=k<m,0<=j<=i+1)的个数即可,先求
出 高度为j的出现的次数,然后逆序扫一遍 高度大于j的次数c[j];
最大完全子矩阵,以第i行为底,可以构成的最大矩阵,因为该题可以任意移动列,所以只要大于
等于 a[i][j]的都可以移动到一起,求出 a[i][k]>=j(0<=k<m,0<=j<=i+1)的个数即可,先求
出 高度为j的出现的次数,然后逆序扫一遍 高度大于j的次数c[j];
#include<iostream> #include<algorithm> using namespace std; const int N = 1005; int a ,c ; char s ; int main() { int n,m,i,j; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) scanf("%s",s[i]); for(i=0;i<m;i++) if(s[0][i]=='1') a[0][i]=1; else a[0][i]=0; for(i=1;i<n;i++) for(j=0;j<m;j++) { if(s[i][j]=='0') a[i][j]=0; else a[i][j]=a[i-1][j]+1; } int res=0; for(i=0;i<n;i++) { //每行都重新扫描 memset(c,0,sizeof(c)); for(j=0;j<m;j++) c[a[i][j]]++; //正点 for(j=i+1;j>=0;j--) c[j]=c[j+1]+c[j]; for(j=0;j<=i+1;j++) if(c[j]*j>res) res=c[j]*j; } printf("%d\n",res); } return 0; }
相关文章推荐
- HDU 2830 Matrix Swapping II(最大完全子矩阵之可移动列)
- HDU 2830 Matrix Swapping II (最大完全子矩阵之可移动列)
- HDU 2830 dp最大完全矩阵Matrix Swapping
- HDU 2830 Matrix Swapping II(最大完全子矩阵之可移动列)
- HDU 2830 Matrix Swapping II(最大完全子矩阵之可移动列)
- HDU 1505 1506 2830 2870求最大矩阵面积 DP
- HDU 1506 DP 最大完全子矩阵
- HDU 2870 Largest Submatrix(最大完全子矩阵之不可移动列)
- HDU2870_Largest Submatrix【最大完全子矩阵】
- hdu 2830 逐行扫描dp求最大完全矩形
- Largest Submatrix-最大子矩阵-HDU-2870
- HDU_1505_矩阵中的最大矩形_dp
- hdu 1559 最大子矩阵 枚举
- 暑期dp46道(9)——HDU 1505City Game 求最大子矩阵面积
- HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
- hdu 3127 二维完全背包,长方形布料剪裁求最大价值
- HDU 1559 最大子矩阵 解题报告
- 最大子矩阵 hdu 1559
- HDU 4888 神奇最大流行进列出构造矩阵
- 【最大子矩阵】hdu 2870