• Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序


    点击打开链接

    题意:

    给你一个01矩阵,行与行之间可以交换位置

    然后问你构成构成最大的只含1的矩形的面积是多少


    思路:

    首先我们预处理一下

    dp[j][i]表示第j列第i行往左边最远能延长多远

    因为列是不会变的,所以我们对于每一列都排序(贪心?),然后利用dp的思想往下找

    到dp[i][j]==0的时候break,因为显然剩下的都是0了


    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 5e3+10;
     5 const int INF = 0x3f3f3f3f;
     6 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
     7 inline ll read(){
     8     ll x=0,f=1;char ch=getchar();
     9     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    10     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    11     return x*f;
    12 }
    13 //////////////////////////////////////////////////////////////////////////
    14 
    15 char s[maxn][maxn];
    16 int dp[maxn][maxn];
    17 
    18 bool cmp(int x,int y){
    19     return x > y;
    20 }
    21 
    22 int main(){
    23     int n,m; n=read(),m=read();
    24     for(int i=1; i<=n; i++)
    25         gets(s[i]+1);
    26     
    27     memset(dp,0,sizeof(dp));
    28     for(int i=1; i<=n; i++){
    29         for(int j=1; j<=m; j++){
    30             if(s[i][j] == '1'){
    31                 dp[j][i] = dp[j-1][i]+1;
    32             }
    33             // cout << dp[j][i] << " ";
    34         }
    35         // cout << endl;
    36     }
    37 
    38     int ans = 0;
    39     for(int j=1; j<=m; j++){
    40         sort(dp[j]+1,dp[j]+1+n,cmp);
    41         for(int i=1; i<=n; i++){
    42             if(dp[j][i] == 0) break;
    43             ans = max(dp[j][i]*i,ans);
    44         }
    45     }
    46 
    47     cout << ans << endl;
    48 
    49     return 0;
    50 }
    51 
    52 // 4 4
    53 // 0111 --> 0 1 2 3                    1 2 3 4
    54 // 1101 --> 1 2 0 1   按列排序==>    1 2 2 3
    55 // 1111 --> 1 2 3 4                    0 1 0 1
    56 // 0001 --> 0 0 0 1                    0 0 0 1
  • 相关阅读:
    深度学习
    定义一个变长数组和常量引用参数
    深度神经网络tricks and tips
    PCA whitening
    反向传播
    激活函数
    C++中模板的使用
    数据结构 (二叉树)1
    C++中的函数指针和函数对象总结
    从头到尾彻底解析Hash表算法
  • 原文地址:https://www.cnblogs.com/yxg123123/p/6827717.html
Copyright © 2020-2023  润新知