Boredom

题目链接:

http://acm.hust.edu.cn/vjudge/contest/121334#problem/G

Description

Alex doesn't like boredom. That's why whenever he gets bored, he comes up with games. One long winter evening he came up with a game and decided to play it.

Given a sequence a consisting of n integers. The player can make several steps. In a single step he can choose an element of the sequence (let's denote it ak) and delete it, at that all elements equal to ak + 1 and ak - 1 also must be deleted from the sequence. That step brings ak points to the player.

Input

The first line contains integer n (1 ≤ n ≤ 105) that shows how many numbers are in Alex's sequence.

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 105).

Output

Print a single integer — the maximum number of points that Alex can earn.

Sample Input

Input

2

1 2

Output

2

Input

3

1 2 3

Output

4

Input

9

1 2 1 3 2 2 2 2 3

Output

10

Hint

Consider the third test example. At first step we need to choose any element equal to 2. After that step our sequence looks like this [2, 2, 2, 2]. Then we do 4 steps, on each step we choose any element equals to 2. In total we earn 10 points.

##题意:

给出n个数,每次任意选择其中一个数Ai:
删除Ai(一个)以及所有的Ai-1 Ai+1; 此次删除操作得分为Ai;
问删除所有元素最多可以获得多少分.


##题解:

由于数组元素的范围是10^5,故可以排序后直接DP:
dp[i][0/1]分别表示删除i或不删除(由其他数删掉)所获得的最大分数.
转移方程:
dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
dp[i][1] = dp[i-1][0] + cnt[i]*i;


##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define eps 1e-8
#define maxn 101000
#define mod 100000007
#define inf 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;

int n;

int cnt[maxn];

LL dp[maxn][2];

int main(int argc, char const *argv[])

{

//IN;

while(scanf("%d", &n) != EOF)
{
memset(cnt, 0, sizeof(cnt));
for(int i=1; i<=n; i++) {
int x; scanf("%d", &x);
cnt[x]++;
} memset(dp, 0, sizeof(dp));
for(int i=1; i<=100000; i++) {
dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
dp[i][1] = dp[i-1][0] + (LL)(cnt[i])*(LL)(i);
} LL ans = max(dp[100000][0], dp[100000][1]);
printf("%I64d\n", ans);
} return 0;

}

最新文章

  1. 解决SprngMVC中ResponseBody注解中文乱码
  2. win7下Outlook2010禁止访问具有潜在不安全因素的附件的解决办法
  3. SVN客户端以及使用 for windows
  4. wsdl地址如何在远程服务器上查看源码?
  5. 咏南C/S开发框架支持最新的DELPHI XE8开发
  6. AspNetPager学习使用2
  7. GSM嗅探
  8. H5小内容(三)
  9. .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  10. My.Ioc 代码示例——利用 ObjectBuilderRequested 事件实现延迟注册
  11. POJ 2182 Lost Cows (线段树)
  12. 在 Vim 中设置 Tab 为4个空格
  13. 在.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图
  14. Python这么强大, 怎样才能快速入坑?
  15. 【学亮IT手记】jQuery DOM操作-获取内容和属性
  16. File操作-将txt里的内容写入到数据库表
  17. RPC使用rabbitmq实现
  18. rabbitmq的延迟消息队列实现
  19. Wampserver 修改根目录
  20. node 事件监听器

热门文章

  1. AVL的旋转
  2. Codeforces 379D - New Year Letter
  3. [反汇编练习] 160个CrackMe之009
  4. cocos2d-x 小技巧
  5. HDU 3844 Mining Your Own Business(割点,经典)
  6. Memcache应用场景介绍,说明
  7. jquery生成二维码
  8. 利用c#反射实现实体类生成以及数据获取与赋值
  9. Android 长按setOnItemLongClickListener 注意细节
  10. git pull冲突解决