首页 > 试题广场 >

Boredom

[编程题]Boredom
  • 热度指数:571 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红拿到了一个长为  的数组 ,每次操作小红可以选择  中的一个元素  将其删除,获得  分的同时删除所有等于  与  a_k -1 的元素。
小红可以进行任意次操作,她想知道她最多能获得多少分,请你帮帮她。

输入描述:
第一行输入一个整数 
第二行输入  个整数


输出描述:
输出一个整数,代表小红能获得的最高得分。
示例1

输入

2
1 2

输出

2
示例2

输入

3
1 2 3

输出

4
示例3

输入

9
1 2 1 3 2 2 2 2 3

输出

10
n = int(input())
a = list(map(int,input().split()))
max_a = max(a)
dp = [0] * (max_a+1)

# 构建字典
from collections import Counter
dic = Counter(a)

for i in range(1,max_a+1):
    if i in dic.keys():
        dp[i] = max(dp[i-1],dp[i-2]+ i * dic[i])
    else:
        dp[i] = dp[i-1]
print(dp[-1])
发表于 今天 17:55:41 回复(0)