#C05L12P02. C05.L12.二维前缀和.引例2.缺席多少人二(n^3算法).填空题
C05.L12.二维前缀和.引例2.缺席多少人二(n^3算法).填空题
题目描述
题目描述 某大会议室有 N 行 M 列的座位,开会时发现有些座位是空的,但每个人都只关注在他 左前方的缺席人数(这次包括同行的左边和自己)。现在想知道每个座位关注到多少座位是空的。
例如: N=3 , M=4 ,下面格子中 1 表示有人, 0 表示空。
1 0 1 1
1 1 0 0
0 1 1 1
答案为:
0 1 1 1
0 1 2 3
1 2 3 4
输入格式
第一行 2 个正整数: N 和 M ,范围在 [1,100] 。 下面 N 行,每行 M 个整数: 0 或 1 。
输出格式
N 行,每行 M 个整数。
样例
3 4
1 0 1 1
1 1 0 0
0 1 1 1
0 1 1 1
0 1 2 3
1 2 3 4
优化分析
四重循环,时间复杂度为 O ( N^4 ) 。如果数据范围大一点,肯定会超时。计算中有大量的统计是重复的,比如:计算位置 (3,3) 时,就和计算位置(3,2)重复了!
程序如果记录下以前计算的结果,算法可以简单改进为 O ( N^3 ) 的。
完成程序
#include<bits/stdc++.h>
using namespace std;
int n,m,a[101][101],sum[101][101];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
sum[i][j] = 填空(1);
for(int ti=1;ti<=填空(2);ti++)
sum[i][j] += 填空(3);
printf("%d ",sum[i][j]);
}
printf("\n");
}
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
相关
在以下作业中: