题目描述 小核桃身处在一个神秘的逃生游戏中,他需要通过解决各种谜题来获得能够帮助他逃脱的物品。在一道谜题中,小核桃被赋予了一个整数数组和一组规则,让他按顺序进行操作。以下是给小核桃的指示:给定一个整数数组,请按以下方法计算得分最高的方案: 首先选择一个整数vv并删除数组中所有等于vv的元素,并将它们的总和加入积分中。 同时,删除数组中所有等于v+1v+1或v-1v−1的元素,这些元素不得分。 重复上述步骤,直到数组中没有更多的元素为止。 现在,小核桃需要计算按照这些规则可以获得的最大分数是多少? 输入描述 第一行包含一个整数nn,表示有nn个整数。 第二行包含nn个整数,表示第ii个数字值为a_ia i ,之间以一个空格隔开。 输出描述 计算出小核桃按照规则可以获得的最大分数。 输入数据 1c++代码
时间: 2024-02-13 18:04:18 浏览: 91
小程序版通过CNN卷积神经网络的核桃好坏识别-不含数据集图片-含逐行注释和说明文档.zip
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
unordered_map<int, int> freq;
for (int i = 0; i < n; i++) {
cin >> nums[i];
freq[nums[i]]++;
}
sort(nums.begin(), nums.end());
int ans = 0;
for (int i = 0; i < n; i++) {
int v = nums[i];
int sum = v * freq[v];
int j = i + 1;
while (j < n && nums[j] == v) {
sum += v;
j++;
}
ans += sum;
i = j - 1;
j = i + 1;
while (j < n) {
if (nums[j] == v + 1 || nums[j] == v - 1) {
freq[nums[j]] = 0;
j++;
} else {
break;
}
}
i = j - 1;
}
cout << ans << endl;
return 0;
}
```
首先读入整数数组,并使用哈希表来记录每个数在数组中出现的次数。然后对数组进行排序,从小到大枚举数组中的每个数v,计算出删除所有等于v的元素所得到的分数sum,并记录下来。接着将数组中所有等于v+1或v-1的元素删除,继续进行下一轮枚举。最后选取所有得分中的最大值即为答案。在实现过程中,需要注意更新哈希表中的值以及枚举指针的移动。
阅读全文