题解 | 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))

全部评论

相关推荐

12-24 20:52
武汉大学 Java
点赞 评论 收藏
分享
我要娶个什么名:学长你电脑闹鬼了
点赞 评论 收藏
分享
12-03 03:32
安徽大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务