酷代码 AI
菜单
服务商

题目描述 小 S 喜欢连在一起的数字,如果这些数字的和很大就更好了。 所以她现在要给你一个 n 行 n 列的网格 A,第 i 行第 j 列上填有一个整数 Ai,j。 接下来你可以在 A 上任取一行、一列或一条与任意对角线平行且只经过网格交叉点的 直线(注意,不是线段),满足经过至少一个数字,且经过的数字之和最大。 如果对上面的表述有疑惑,请参考样例解释辅助理解。 你需要告诉小 S 这个最大的数字之和。 输入格式 输入共 n+1 行。 第一行,一个正整数 n,表示方阵的行数、列数。 接下来 n 行,每行 n 个用空格隔开的整数,其中第 i 行第 j 个整数表示 Ai,j。 输出格式 输出一行一个整数,表示最大的数字之和。 输入输出样例 输入 #1 3 1 1 1 2 2 2 3 3 3 输出 #1 9 输入 #2 3 -1 1 2 4 0 3 1 9 2 输出 #2 13 输入 #3 3 -1 -1 -1 -1 -1 -1 -1 -1 -1 输出 #3 -1 输入 #4 3 -100 -10 -100 -10 99

```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<vector<int>> A(n, vector<int>(n)); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cin >> A[i][j]; } } int maxSum = -1e9; // 计算每行的和 for (int i = 0; i < n; ++i) { int rowSum = 0; for (int j = 0; j < n; ++j) { rowSum += A[i][j]; } maxSum = max(maxSum, rowSum); } // 计算每列的和 for (int j = 0; j < n; ++j) { int colSum = 0; for (int i = 0; i < n; ++i) { colSum += A[i][j]; } maxSum = max(maxSum, colSum); } // 计算正对角线平行直线的和 for (int startCol = 0; startCol < n; ++startCol) { int sum = 0; for (int i = 0, j = startCol; i < n && j < n; ++i, ++j) { sum += A[i][j]; } maxSum = max(maxSum, sum); } for (int startRow = 1; startRow < n; ++startRow) { int sum = 0; for (int i = startRow, j = 0; i < n && j < n; ++i, ++j) { sum += A[i][j]; } maxSum = max(maxSum, sum); } // 计算反对角线平行直线的和 for (int startCol = 0; startCol < n; ++startCol) { int sum = 0; for (int i = 0, j = startCol; i < n && j >= 0; ++i, --j) { sum += A[i][j]; } maxSum = max(maxSum, sum); } for (int startRow = 1; startRow < n; ++startRow) { int sum = 0; for (int i = startRow, j = n - 1; i < n && j >= 0; ++i, --j) { sum += A[i][j]; } maxSum = max(maxSum, sum); } cout << maxSum << endl; return 0; } ``` 代码解释 1. 输入处理: - 首先读取方阵的行数和列数 `n`。 - 接着使用二维向量 `A` 存储方阵中的每个元素。 2. 初始化最大和: - 初始化 `maxSum` 为一个非常小的值 `-1e9`。 3. 计算每行的和: - 通过两层循环遍历每一行,累加每行元素的和,更新 `maxSum`。 4. 计算每列的和: - 同样使用两层循环遍历每一列,累加每列元素的和,更新 `maxSum`。 5. 计算正对角线平行直线的和: - 从第一行开始,以不同列作为起点,计算与正对角线平行的直线元素和。 - 从第一列开始,以不同行作为起点,计算与正对角线平行的直线元素和。 - 更新 `maxSum`。 6. 计算反对角线平行直线的和: - 从第一行开始,以不同列作为起点,计算与反对角线平行的直线元素和。 - 从第一列开始,以不同行作为起点,计算与反对角线平行的直线元素和。 - 更新 `maxSum`。 7. 输出结果: - 最后输出最大和 `maxSum`。 [2025-11-26 20:07:06 | AI问答 | 973点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多