C 如何在二维数组中找到给定范围的最大和?
我需要知道如何在2D数组中找到给定范围的最大和,最好是在C中,以提高下面给出的代码的效率并解决问题 为了更好地理解这一点,请阅读下面我需要解决的问题 问题 大城市X是一个由N行和M列组成的网格。这里有 每个单元中居住的人数。您被要求定位 电信塔让尽可能多的人感到满意。这个 蜂窝塔可以覆盖Y行和X列的矩形区域。 找到你能满足的最大人数 约束 样本输出 解释 通过将塔架覆盖2x3区域,包括5、6、7、2、9和9个单元,可满足最大人数的需求C 如何在二维数组中找到给定范围的最大和?,c,C,我需要知道如何在2D数组中找到给定范围的最大和,最好是在C中,以提高下面给出的代码的效率并解决问题 为了更好地理解这一点,请阅读下面我需要解决的问题 问题 大城市X是一个由N行和M列组成的网格。这里有 每个单元中居住的人数。您被要求定位 电信塔让尽可能多的人感到满意。这个 蜂窝塔可以覆盖Y行和X列的矩形区域。 找到你能满足的最大人数 约束 样本输出 解释 通过将塔架覆盖2x3区域,包括5、6、7、2、9和9个单元,可满足最大人数的需求 5 + 6 + 7 + 2 + 9 + 9 = 38 我的
5 + 6 + 7 + 2 + 9 + 9 = 38
我的代码
这段代码失败了,因为它太线性了,当使用较大的输入时需要花费大量时间
您可以自己尝试这个问题,我想您解决的数字网格问题的主要问题是嵌套循环。最简单的优化是最小化范围每次移动的重新计算次数 我在原始代码中尝试了以下更改: 包括 包括 包括 包括 int main{ int N,M,Y,X; 扫描%d%d%d%d,&N,&M,&Y,&X; int max=0; int-total=0; 整数数据[N][M]; forint i=0;i
4 5 2 3
3 1 1 1 2
2 5 6 7 1
1 2 9 9 1
1 1 1 1 1
38
5 + 6 + 7 + 2 + 9 + 9 = 38
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int N, M, Y, X;
scanf("%d %d %d %d", &N, &M, &Y, &X);
int max = 0;
int total = 0;
int data[N][M];
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
scanf("%d",&(data[i][j]));
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
total = 0;
for(int l = 0; (l < Y) && (i + Y) <= N; l++)
{
for(int k = 0; (k < X) && (j + X <= M); k++)
{
total += data[i+l][j+k];
}
if(total > max)
max = total;
}
}
}
printf("%d",max);
return 0;
}