最大01 子矩阵

最大01 矩阵

http://acm.nuaa.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1017

这个在输入数据时候只能用printf ,用cin会超时

#include<iostream>
#include<stdio.h>
#define MAX 2004  
int l[MAX],r[MAX],g[MAX][MAX],h[MAX];

int main(int argc, char *argv[])
{
  int n;
  scanf("%d",&n);
  int i,j;int sum=0;
  for(i=1;i<=n;++i) {
    for(j=1;j<=n;++j)
      scanf("%d",&g[i][j]);
    for(j=1;j<=n;++j) {
      if(g[i][j])h[j]=0;
      else h[j]++;
    }
    for(j=1;j<=n;++j){
      l[j]=j;
      
      while(l[j]-1>=1 && h[l[j]-1]>=h[j])
        l[j]=l[l[j]-1];
    }
    for(j=n;j>=1;--j){
      r[j]=j;
    while(r[j]+1<=n && h[r[j]+1]>=h[j])
      r[j]=r[r[j]+1];
    }

    for(j=1;j<=n;++j){
      int tmp=(r[j]-l[j]+1)*h[j];
      if(sum<tmp)sum=tmp;
    }
  }
  printf("%d",sum);
  
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值