码迷,mamicode.com
首页 > 其他好文 > 详细

[codevs1159]最大全0子矩阵(悬线法)

时间:2019-02-11 10:59:14      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:name   turn   print   div   ret   大全   for   main   else   

解题关键:悬线法模板题。注意此模板用到了滚动数组。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define maxn 2002
using namespace std;
typedef long long ll;
int map[maxn][maxn],l[maxn],r[maxn],h[maxn];
int n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>map[i][j];
    for(int i=1;i<=n;i++)l[i]=1,r[i]=n,h[i]=0;
    int ll,rr,ans=0;
    for(int i=1;i<=n;i++){
        ll=0,rr=n+1;
        for(int j=1;j<=n;j++){
            if(map[i][j])h[j]=0,l[j]=1,ll=j;
            else h[j]++,l[j]=max(l[j],ll+1);
        }
        for(int j=n;j>=1;j--){
            if(map[i][j])r[j]=n,rr=j;//不要重复++与赋值
            else r[j]=min(r[j],rr-1),ans=max(ans,h[j]*(r[j]-l[j]+1));
        }
    }
    printf("%d\n",ans);
    return 0;
}

 

[codevs1159]最大全0子矩阵(悬线法)

标签:name   turn   print   div   ret   大全   for   main   else   

原文地址:https://www.cnblogs.com/elpsycongroo/p/10360783.html

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