zoukankan      html  css  js  c++  java
  • Wannafly挑战赛19

    Wannafly挑战赛19


    矩阵

    • 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 M(i,j)。
      请寻找一个子矩阵,使得这个子矩阵的和最大,且满足以下三个条件:
      子矩阵的行数不能超过 X 行。
      子矩阵的列数不能超过 Y 列。
      子矩阵中 0 的个数不能超过 Z 个。
      请输出满足以上条件的最大子矩阵和。

    • 去掉所有的条件后,可以发现是一个淳朴的二维矩阵求最大子矩阵。可以通过一维最大连续子数组的方式去解决它。
      现在首先考虑第二个限制,就是限制了一维数组的个数。
      现在,问题就转化为一维数组中,寻找连续的一段,保证0的出现次数的约束和数组长度的约束。
      0出现的次数的前缀和与数组的长度都是单调递增的。所以可以通过单调队列的方式解决。

    • 可以推广一下,如果在此时的一维数组中,需要约束的条件是单调的,也就是说,如果对于此位来说(队首元素不满足条件,需要出队),那么对于后面的位,后面的元素,也是不满足条件的。这样,就能满足单调性。
  • 相关阅读:
    Linux系统分支之Ubuntu
    运维工具之Netdata
    Antd Tree组件虚拟滚动空白问题
    没有root权限的情况下安装vim
    C++ / Python测量程序执行时间
    Linux dmidecode 命令介绍
    网卡到底是什么
    flannel的革命性的变化是在哪里呢?
    kube-proxy
    cilium
  • 原文地址:https://www.cnblogs.com/nowheretrix/p/9307810.html
Copyright © 2011-2022 走看看