无聊游戏
Submit solution
Points:
200
Time limit:
1.0s
Memory limit:
10M
Author:
Problem type
Allowed languages
C, C++
https://codeforces.com/problemset/problem/455/A
Alex 不喜欢无聊。每当他感到无聊的时候,他就会发明一些游戏来玩。有一个寒冷的冬夜,他想出了一个游戏并决定尝试一下。
给定一个长度为 \(n\) 的整数序列 a。
Alex 可以进行若干步操作:
每一步,他可以选择序列中的某个元素(记为 \(a_k\))并删除它;
同时,所有等于\(a_k + 1 和 a_k - 1\) 的元素也必须被一并删除;
每次操作可以获得 \(a_k\)的分数。
Alex 是一个完美主义者,他想要获得尽可能多的分数。请你帮他计算,最多能获得多少分数?
输入
第一行输入一个整数n(\(1 \le n \le 10^5\))
第二行输入n个整数(\( 1 \le a_i \le 10^5\)),空格隔开
输出
输出一个整数,表示 Alex 最多可以获得的分数。
样例 1:
2
1 2
输出:
2
样例 2:
输入:
3
1 2 3
输出:
4
样例 3:
输入:
9
1 2 1 3 2 2 2 2 3
输出:
10
说明:
原序列为:[1, 2, 1, 3, 2, 2, 2, 2, 3]
第一步:我们选择一个 2,删除它,同时删除所有的 1 和 3。
此时剩下的序列只包含 [2, 2, 2, 2]
后续每一步选择一个 2,获得 2 分,一共选择 5 次。
总得分是:2 * 5 = 10
注意最后求和的时候,数据溢出,最大值应该能够达到\(10^5*10^5 = 10^{10}\)
Comments