zoukankan      html  css  js  c++  java
  • Codeforces 375B Maximum Submatrix 2 (DP)

    <题目链接>

    题目大意:
    给出一个01矩阵,行与行之间可以互换位置,问能够得到最大的全1矩阵的面积。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 5e3+5;
    int n,m;
    int dp[N][N];
    char mpa[N][N];
    
    int main(){
        while(~scanf("%d%d",&n,&m)){
            for(int i=1;i<=n;i++)scanf("%s",mpa[i]+1);
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    if(mpa[i][j]=='1')dp[j][i]=dp[j-1][i]+1;    //在第i行内,以(i,j)这个点为末尾的最长连续1的数量
            int ans=0;
            for(int i=1;i<=m;i++){
                sort(dp[i]+1,dp[i]+1+n);     //在第i列,将该列所有的dp[i]全部排序
                for(int j=n;j>=1;j--)
                    ans=max(ans,dp[i][j]*(n-j+1));
                    //因为这样能够保证以这一列为矩阵的右边界,同时当前行以下的所有行的连续的1的个数一定大于等于当前行,所以能够这样一直向上递推构建合法的全1矩阵,只需要不断更新答案即可
            }printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    java之 向上转型与向下转型
    java之 惰性初始化
    mysql 学习网站
    history of program atan2(y,x)和pow(x,y)
    atom 之 前端必备插件
    js之正则表达式
    Django之模型层
    每日作业5/28
    每日作业5/27
    每日作业5.26
  • 原文地址:https://www.cnblogs.com/00isok/p/10597468.html
Copyright © 2011-2022 走看看