蓝桥集训之统计子矩阵

统计子矩阵

  • 核心思想:矩阵前缀和 + 双指针

    • 用i和j双指针 遍历所有子矩阵的列
    • 用s和t双指针 遍历所有子矩阵的行
    • 求其子矩阵的和 若>k 将s向下移动 矩阵和必定减小(元素个数减少)
    • 直到满足<=k 因为列一定 行数即为方案数 (从t行往上数到s行 共t-s+1个区间[t,t][t-1,t]....[s,t])
cpp 复制代码
  #include<iostream>
  using namespace std;
  const int N = 510;
  typedef long long LL;
  int a[N][N];
  int n,m,k;
  
  int main()
  {
      cin>>n>>m>>k;
      for(int i=1; i<=n; i++){
          for(int j=1; j<=m; j++){
              cin >> a[i][j];
              a[i][j] += a[i-1][j] + a[i][j-1] - a[i-1][j-1];  //求前缀和数组
          }
      }
      LL res = 0;
      for(int i=1;i<=m;i++)  //遍历列
      {
          for(int j=i;j<=m;j++)
          {
              for(int s=1,t=1;t<=n;t++)  //遍历行
              {
                  while(s<=t && a[t][j] - a[s-1][j] - a[t][i-1] + a[s-1][i-1] > k)
                      s++;
                  if(s<=t) res += t-s+1;
              }
          }
      }
      cout<<res;
  }
相关推荐
前端小白在前进19 分钟前
力扣刷题:复原IP地址
tcp/ip·算法·leetcode
yaoh.wang31 分钟前
力扣(LeetCode) 94: 二叉树的中序遍历 - 解法思路
python·算法·leetcode·面试·职场和发展·二叉树·跳槽
Evand J32 分钟前
【课题推荐】基于视觉(像素坐标)与 IMU 的目标/自身运动估计(Visual-Inertial Odometry, VIO),课题介绍与算法示例
人工智能·算法·计算机视觉
xu_yule33 分钟前
算法基础(背包问题)—分组背包和混合背包
c++·算法·动态规划·分组背包·混合背包
蓝色汪洋40 分钟前
数码串和oj
数据结构·算法
努力学算法的蒟蒻44 分钟前
day39(12.20)——leetcode面试经典150
算法·leetcode·面试
科学最TOP1 小时前
xLSTM-Mixer:基于记忆混合的多变量时间序列预测
大数据·人工智能·算法·机器学习·时间序列
xlq223221 小时前
29.哈希(下)
算法·哈希算法·散列表
阿昭L1 小时前
leetcode链表是否有环
算法·leetcode·链表
yaoh.wang2 小时前
力扣(LeetCode) 83: 删除排序链表中的重复元素 - 解法思路
程序人生·算法·leetcode·链表·面试·职场和发展