题解 | Boredom
Boredom
https://www.nowcoder.com/practice/8aa58d11c39e4f81911f5f9ebc687d12
import sys
from collections import Counter
n=int(input())
a=list(map(int,input().split()))
count = Counter(a)
mx=max(a)
dp=[0]*(mx+1)#数i可能获取的最高分
dp[1]=count[1]#1的得分
# dp[2]=max(dp[1],count[2]*2)#2的得分,如果2总分>1则可以不要1,保留2,否则保留1的分数
#从3一直到最大值的得分
for i in range(2,mx+1):
#比较ak得分与ak-1得分,若ak-1得分多就选择dp[i-1] 否则选择dp[i]同时还要加上dp[i-2]
#(因为ak-1会删除ak-2,ak,不选ak-1,就要将ak-2得分与ak-1)相加
dp[i]=max(dp[i-1],count[i]*i+dp[i-2])
print(max(dp))
查看1道真题和解析