码迷,mamicode.com
首页 > 移动开发 > 详细

hdu 2830 Matrix Swapping II(额,,排序?)

时间:2015-01-24 15:50:36      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

题意:

N*M的矩阵,每个格中不是0就是1。

可以任意交换某两列。最后得到一个新矩阵。

问可以得到的最大的子矩形面积是多少(这个子矩形必须全是1)。

 

思路:

先统计,a[i][j]记录从第i行第j列格往上连续的0的个数。

枚举每一行作为答案子矩阵的底, 然后将这一行的a[i][j]从大到小排序,扫一遍计算。

看代码。

 

代码:

int n,m;
char temps[1005][1005];
int a[1005][1005];
 int ts[1005];



bool cmp(int a,int b){
    return a>b;
}


int main(){

    while(scanf("%d%d",&n,&m)!=EOF){
        rep(i,0,n-1){
            scanf("%s",temps[i]);
        }
        mem(a,0);
        rep(i,0,m-1) if(temps[0][i]==0) a[0][i]=0; else a[0][i]=1;
        rep(i,1,n-1){
            rep(j,0,m-1){
                if(temps[i][j]==1) a[i][j]=1+a[i-1][j];
            }
        }

        int ans=0;
        rep(i,0,n-1){
            rep(j,0,m-1) ts[j]=a[i][j];
            sort(ts,ts+m,cmp);
            rep(i,0,m-1) ans=max( ans,ts[i]*(i+1) );
        }

        printf("%d\n",ans);
    }

    return 0;
}

 

hdu 2830 Matrix Swapping II(额,,排序?)

标签:

原文地址:http://www.cnblogs.com/fish7/p/4245878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!