本人第一篇题解
今天闲着没事,随机跳题,然后看到这题,觉得运气爆棚,计蒜客L2时空复杂度的课后原题,微改.
首先,这题我们可以知道枚举处理就行,注意点:
1.千万要分清每个数组的用途,不要写错!!本蒟蒻就因为b,c数组名调了半天
2.注意究竟怎样判断才能正确输出Bad Game!
,我么可以定义一个bool flag来记录该矩阵是否有容身之地。
代码如下,多多关照:
#include <iostream>
using namespace std;
int a[1010][1010], b[1010], c[1010]; //用于存储原矩阵、每行的和,每列的和
int n;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j]; //输入该矩阵中的i行j列点
b[i] += a[i][j]; //并且将第i行的和加上这个点
c[j] += a[i][j]; //顺带将第j列的和加上这个点
}
}
int ans = 0;
bool flag = false; //flag记录矩阵是否有 0 (0代表容身之地)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] == 0) {
flag = true; //如果有容身之地,更新为false
ans = max(ans, b[i] + c[j]); //求最大的数
}
}
}
if (!flag) { //如果为false就输出这句话
cout << "Bad Game!";
}else { //如果是true,就输出ans值
cout << ans;
}
return 0;
}