zoukankan      html  css  js  c++  java
  • 最大二维子区间和 (贪心+前缀和)

    【题目描述】

        已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。

    【题目链接】

        http://noi.openjudge.cn/ch0406/1768/

    【算法】

        众所周知一维子区间最大值要如何求,那么为求二维子区间最大和可以枚举任意两行,这两行间的同一列的数之和可以看成是一维子区间的一个值,问题就转换成一维子区间的最大值。当然两行间同一列数的和可以由列前缀和之差构成,所以读入的时候构造的初始矩阵就为列前缀和矩阵。

    【代码】

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,i,j,k,ans;
     4 int a[200][200],b[200];
     5 int main()
     6 {
     7     cin>>n;
     8     for(i=1;i<=n;i++)
     9         for(j=1;j<=n;j++)
    10             cin>>a[i][j],a[i][j]+=a[i-1][j];
    11     for(i=0;i<=n;i++)
    12     for(j=i+1;j<=n;j++) {
    13         int rec=0;
    14         for(k=1;k<=n;k++) {
    15             rec+=a[j][k]-a[i][k];
    16             if(rec<0) rec=0;
    17             else ans=max(ans,rec);
    18         }
    19     }
    20     cout<<ans;
    21     return 0;
    22 }
  • 相关阅读:
    JOI2017FinalC JOIOI 王国
    JOISC2017C 手持ち花火
    P4336 [SHOI2016]黑暗前的幻想乡
    SP104 HIGH
    P3160 [CQOI2012]局部极小值
    P4965 薇尔莉特的打字机
    【BZOJ4361】isn
    P3506 [POI2010]MOT-Monotonicity 2
    P3214 [HNOI2011]卡农
    P3704 [SDOI2017]数字表格
  • 原文地址:https://www.cnblogs.com/Willendless/p/9350560.html
Copyright © 2011-2022 走看看