- 题意如下:
在一个数组中删除数字,当删除x
时,该x
(不包括别的x
)以及所有的x-1
和x+1
都会被删除,得到x分。怎样的删除顺序最终得到的总分最高。 - 分析:
将数组排序,cnt[i]
记录每个数出现的个数,初始时dp[i][0]
为数字,dp[i][1]
为删除该数字得到的分数。最终dp[i][1]
表示在前i个数字中删除时能得到的最高分。
n = int(input())
a = list(map(int, input().split()))
cnt = [0] * (max(a) + 1)
for i in a:
cnt[i] += 1
dp = []
for i in range(len(cnt)):
if cnt[i] > 0:
dp.append([i, i * cnt[i]])
if len(dp) == 1:
print(dp[0][1])
else:
if dp[1][0] - dp[0][0] == 1:
dp[1][1] = max(dp[1][1], dp[0][1])
else:
dp[1][1] += dp[0][1]
for i in range(2, len(dp)):
if dp[i - 1][0] + 1 < dp[i][0]:
dp[i][1] += dp[i - 1][1]
else:
dp[i][1] = max(dp[i - 1][1], dp[i - 2][1] + dp[i][1])
print(dp[-1][1])