C++矩阵取数游戏:最大化每轮得分

在这个问题中,你需要从一个n x n的矩阵中进行n轮取数,目标是最大化你的总得分。每一轮,你都要从矩阵的每一行中选择一个之前没有选择过的数字。这一轮你的得分是你选择的数字的总和乘以轮数。

下面是一个C++程序,它解决了这个问题:cpp#include #include #include using namespace std;

struct st { int val; int row; int col;};

bool cmp(st a, st b) { return a.val > b.val;}

int main() { int n; cin >> n; vector<vector> matrix(n, vector(n)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> matrix[i][j]; } } vector nums; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { st num; num.val = matrix[i][j]; num.row = i; num.col = j; nums.push_back(num); } } sort(nums.begin(), nums.end(), cmp); vector takenRows(n, 0); vector takenCols(n, 0); long long score = 0; for (int i = 0; i < n; i++) { int row = nums[i].row; int col = nums[i].col; if (takenRows[row] == 0 && takenCols[col] == 0) { score += (i + 1) * nums[i].val; takenRows[row] = 1; takenCols[col] = 1; } } cout << score << endl; return 0;}

这个程序首先读取矩阵的维度和元素。然后,它创建了一个结构体'st'来存储每个数字的值、行号和列号。程序使用这个结构体对矩阵中的所有数字进行排序。

接下来,程序遍历排序后的数字列表,并检查每个数字是否可以被选择(即,该数字所在的行和列之前没有被选择过)。如果一个数字可以被选择,程序就会将其加到总得分中,并标记该数字所在的行和列已经被选择过。

最后,程序输出最大总得分。

这个程序使用了一些C++的特性,例如向量、结构体和排序算法,来有效地解决矩阵取数游戏问题。

C++矩阵取数游戏:最大化每轮得分

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

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