牛客栗酱的文明2
题目链接:https://ac.nowcoder.com/acm/contest/19305/1027想听听解题思路: 这道题是一道贪心题目。
首先,我们可以将所有的时间段按照结束时间从小到大进行排序。
然后,我们从第一个时间段开始,每次选择结束时间最早且与前一个时间段没有重叠的时间段,并将其加入答案中。
具体实现时,我们可以用一个变量 $last$ 记录上一个加入答案的时间段的结束时间,每次在可选时间段中选择结束时间最早且与 $last$ 不重叠的时间段加入答案中,并将 $last$ 更新为该时间段的结束时间。
最后,我们统计答案中时间段的数量即可。
代码实现如下: 解题思路:牛客栗酱的文明2
这道题目的要求是计算一个矩阵的行和列的最大值,并输出它们之和。
首先,我们需要读取输入的矩阵,并初始化行和列的最大值为0。
然后,我们通过两层循环遍历矩阵的每个元素,同时更新行和列的最大值。
在内层循环中,我们可以使用两个变量来维护当前行和列的和,每次将对应位置的值加到相应的和上。
在外层循环结束后,我们就可以得到行和列的最大值,将它们相加即可得到结果。
下面是示例代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;// 输入矩阵的大小
vector<vector<int>> matrix(n, vector<int>(m));// 定义一个二维矩阵
// 读取矩阵元素
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> matrix;
}
}
int maxRowSum = 0;// 行的最大和
int maxColSum = 0;// 列的最大和
// 计算行和列的最大值
for (int i = 0; i < n; i++) {
int rowSum = 0;// 当前行的和
for (int j = 0; j < m; j++) {
rowSum += matrix;// 更新当前行的和
}
maxRowSum = max(maxRowSum, rowSum);// 更新行的最大和
}
for (int j = 0; j < m; j++) {
int colSum = 0;// 当前列的和
for (int i = 0; i < n; i++) {
colSum += matrix;// 更新当前列的和
}
maxColSum = max(maxColSum, colSum);// 更新列的最大和
}
int result = maxRowSum + maxColSum;// 计算结果
cout << result << endl;
return 0;
}
这样,我们就可以得到题目要求的结果。希望以上解题思路对你有所帮助!如果有任何疑问,请随时提出。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]