蓝桥杯统计子矩阵前缀和C++(附图文超详细讲解)(保姆级)

简介: 蓝桥杯统计子矩阵前缀和C++(附图文超详细讲解)(保姆级)

题目描述

给定一个 N × M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 × 1,最大 N × M) 满足子矩阵中所有数的和不超过给定的整数 K?


输入格式

第一行包含三个整数 N, M 和 K.

之后 N 行每行包含 M 个整数,代表矩阵 A.



输出格式

一个整数代表答案。


样例输入

3 4 10

1 2 3 4

5 6 7 8

9 10 11 12


样例输出

19

提示

满足条件的子矩阵一共有 19,包含:


大小为 1 × 1 的有 10 个。


大小为 1 × 2 的有 3 个。


大小为 1 × 3 的有 2 个。


大小为 1 × 4 的有 1 个。


大小为 2 × 1 的有 3 个。


对于 30% 的数据,N, M ≤ 20. 对于 70% 的数据,N, M ≤ 100.


对于 100% 的数据,1 ≤ N, M ≤ 50


0; 0 ≤ Ai j ≤ 1000; 1 ≤ K ≤ 250000000.

#include <iostream>
using namespace std;
int a[500][500];
int s[500][500] = { 0 };
int main() {
  int N, M, K;
  cin >> N >> M >> K;
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) {
      cin >> a[i][j];
      s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
    }
  }
  int cnt = 0;
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) {
      for (int k = i; k <= N; k++) {
        for (int p = j; p <= M; p++) {
          if (s[k][p] - s[i - 1][p] - s[k][j - 1] + s[i - 1][j - 1] <= K) {
            cnt++;
          }
          else break;
        }
      }
    }
  }
  cout << cnt;
  return 0;
}


能拿个70%的分,其他的会超时,思路时一遍又一遍遍历这个数组。

最重要的是二维前缀和的公式

s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];

注意a和s都是1下标开头

21a071f658b24a66bcc0bf16131e558c.png



求出前缀和后我们就可以来求我们的子矩阵和了



75857440a7e14003a9af05716da971f4.png

然后在遍历的同时统计和即可



相关文章
|
2月前
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
2月前
|
人工智能 算法 BI
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
|
2月前
|
人工智能 C++
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
|
2月前
|
机器学习/深度学习 算法 关系型数据库
第十五届蓝桥杯C++B组省赛
第十五届蓝桥杯C++B组省赛
111 14
|
2月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
51 5
|
2月前
|
机器学习/深度学习 C++
最大子矩阵(C/C++)
最大子矩阵(C/C++)
|
2月前
|
人工智能 算法 C++
一篇带你速通前缀和算法(C/C++)
一篇带你速通前缀和算法(C/C++)
|
4月前
|
C++
C++ PCL 计算多个RT矩阵变换后的变换矩阵
C++ PCL 计算多个RT矩阵变换后的变换矩阵
56 0
|
5月前
|
NoSQL Redis C++
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
|
6月前
|
C++
C++解决线性代数矩阵转置 小实践
【6月更文挑战第3天】C++解决线性代数矩阵转置
87 2