统计子矩阵(70%测试数据)
给定一个 N×M 的矩阵 A,请你统计有多少个子矩阵 (最小 1×1,最大 N×M)
满足子矩阵中所有数的和不超过给定的整数 K。
你可以使用六个循环进行操作,可以过10%的数据
如果你知道前缀和怎么求,你可使用四个循环进行求解。
当然还可以进行优化,还没有学习!!
运用前缀和
#include<iostream>
using namespace std;
const int N = 1010;
int a[N][N];
int main()
{
int n, m, q;
cin >> n >> m >> q;
int res = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];
a[i][j] = a[i][j] + a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
for (int x = i; x <= n; x++)
for (int y = j; y <= m; y++)
{
int sum = 0;
sum = a[x][y] - a[x][j - 1] - a[i - 1][y] + a[i - 1][j - 1];
if (sum <= q) res++;
}
cout << res << endl;
return 0;
}