你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
HDU 2830 Matrix Swapping II
 

枚举所有的行,然后对于每个行,记录到这行为止每列连续的1的个数,我们可以把每列看做宽度为1,

连续个数看做它的高度。

然后问题就可以看做在一些高度可能为0的相邻矩形中找到最大矩形,即最大长方形那道题(HDU 1506)

应该注意的是列能任意移动,那么将高度从大到小排序是最优的求解方法,然后有b[i-1]>=b[i],

面积显然是h[i] * i . 然后枚举.

[cpp]
#include <cstdio> 
#include<iostream> 
#include <cstring> 
#include <algorithm> 
using namespace std; 
int a[1010],b[1010]; 
bool cmp(int t1,int t2) 

     return t1>t2; 

int main() 

    int i,j,n,m,len,ans; 
    char ch[1001]; 
    while(scanf("%d%d",&n,&m)!=EOF) 
    { 
       memset(a,0,sizeof(a)); 
       ans=0; 
       for(i=1;i<=n;i++) 
       { 
          scanf("%s",ch); 
          len=strlen(ch); 
          for(j=0;j<len;j++) 
          { 
            if(ch[j]=='1') 
                a[j+1]++; 
            else a[j+1]=0; 
            b[j+1]=a[j+1]; 
          } 
          sort(b+1,b+1+m,cmp); 
        for(j=1;j<=m&&b[j];j++) 
            if(b[j]*j>ans) ans=b[j]*j; 
       
       } 
       printf("%d\n",ans); 
    } 
    return 0; 

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089