取数游戏: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;
}
取数游戏:C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/k43x 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录