取数游戏:C++ 代码实现
取数游戏:C++ 代码实现
题目描述
给出一个 $n \times n$ 的矩阵,进行取数游戏。 取数共 $n$ 轮,第 $i$ 轮需要从每行分别取一个没取过的数字,设取出的数字总和是 $s$,则第 $i$ 轮的实际得分是 $i \times s$。 求 $n$ 轮取数的最大总得分。
思路
- 定义一个结构体,存储值和是否被选择的状态;
- 每一轮从每行中选择一个未被选择的最大值,将其标记为已选择,计入总得分;
- 重复上述步骤,直到所有行的数字都被选择为止。
C++ 代码
#include <iostream>
using namespace std;
struct Node {
int val;
bool selected;
};
int main() {
int n;
cin >> n;
Node matrix[100][100];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> matrix[i][j].val;
matrix[i][j].selected = false;
}
}
int score = 0;
for (int round = 1; round <= n; ++round) {
int sum = 0;
for (int i = 0; i < n; ++i) {
int maxVal = -1, maxIndex = -1;
for (int j = 0; j < n; ++j) {
if (!matrix[i][j].selected && matrix[i][j].val > maxVal) {
maxVal = matrix[i][j].val;
maxIndex = j;
}
}
matrix[i][maxIndex].selected = true;
sum += maxVal;
}
score += round * sum;
}
cout << score << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/k43x 著作权归作者所有。请勿转载和采集!