取数游戏 - C++ 高效解法
取数游戏 C++ 高效解法
题目描述
给出一个 n x n 的矩阵,进行取数游戏。取数共 n 轮,第 i 轮需要从每行分别取一个没取过的数字,设取出的数字总和是 s,则第 i 轮的实际得分是 i * s。求 n 轮取数的最大总得分。
C++ 代码cpp#include
using namespace std;
int main() { int n; cin >> n; vector<vector
vector
int totalScore = 0; for (int i = 0; i < n; ++i) { totalScore += (i + 1) * rowSums[i]; }
cout << totalScore << endl; return 0;}
算法解释
- 使用
vector存储矩阵,方便使用迭代器进行操作。2. 使用accumulate函数计算每行的和,并存储在rowSums向量中。3. 使用sort函数对rowSums向量进行降序排序,保证每次选择最大的行和。4. 使用accumulate函数计算总得分。
代码分析
- 使用
vector和迭代器方便地操作矩阵数据。*accumulate函数提供高效的求和操作。*sort函数对行和进行排序,保证选择最大的数字。
总结
使用 STL 库中的高级函数,可以简化代码,并提高代码效率。在本例中,我们使用了 vector、accumulate 和 sort 函数,使得代码更加简洁易懂
原文地址: https://www.cveoy.top/t/topic/ob9i 著作权归作者所有。请勿转载和采集!