C++ 取数游戏:最大总得分算法实现
C++ 取数游戏:最大总得分算法实现
题目描述
给出一个 $n \times n$ 的矩阵,进行取数游戏。 取数共 $n$ 轮,第 $i$ 轮需要从每行分别取一个没取过的数字,设取出的数字总和是 $s$,则第 $i$ 轮的实际得分是 $i \times s$。 求 $n$ 轮取数的最大总得分。
代码实现
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int a[N][N];
struct node {
int v, id;
bool operator< (const node& t) const {
return v > t.v;
}
} b[N];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
long long ans = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
b[j] = {a[i][j], j};
}
sort(b + 1, b + n + 1);
ans += b[1].v * i;
}
cout << ans << endl;
return 0;
}
代码解析
- 结构体定义: 定义了一个
node结构体,用于存储每个数字的值v和其在矩阵中的位置id。 - 排序: 对于每一行,将数字按照值从大到小排序,并使用结构体
node存储排序后的值和位置信息。 - 计算得分: 每次迭代选择当前行中最大值(即
b[1].v),并将该值乘以当前轮数i,累加到总得分ans中。
总结
该代码使用结构体和排序算法实现了取数游戏最大得分计算,代码简洁高效。
相关内容
原文地址: https://www.cveoy.top/t/topic/k40p 著作权归作者所有。请勿转载和采集!