题目链接:http://codeforces.com/problemset/problem/455/A

A. Boredom
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

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.

Alex is a perfectionist, so he decided to get as many points as possible. Help him.

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 test(s)
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
Note

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.

题意:

给定一个序列。每次从序列中选出一个数ak,获得ak的得分。同一时候删除序列中全部的ak−1,ak+1,

求最大得分的值。

思路:

存下每一个数的个数放在c中。消除一个数i,会获得c[i]*i的值(由于能够消除c[i]次),

假设从0的位置開始向右消去,那么。消除数i时。i-1可能选择了消除。也可能没有,

假设消除了i-1,那么i值就已经不存在,dp[i] = dp[i-1]。

假设没有被消除,那么dp[i] = dp[i-2]+ c[i]*i。

代码例如以下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL __int64
const int MAXN = 100017;
LL c[MAXN], dp[MAXN];
void init()
{
memset(dp,0,sizeof(dp));
memset(c,0,sizeof(c));
}
int main()
{
LL n;
LL tt;
int i, j;
while(~scanf("%I64d",&n))
{
init();
int maxx = 0;
for(i = 1; i <= n; i++)
{
scanf("%I64d",&tt);
if(tt > maxx)
maxx = tt;
c[tt]++;
}
dp[0] = 0, dp[1] = c[1];
for(i = 2; i <= maxx; i++)
{
dp[i] = max(dp[i-1],dp[i-2]+c[i]*i);
}
printf("%I64d\n",dp[maxx]);
}
return 0;
}

最新文章

  1. Deadlock Detecting--转
  2. 当table中的td内容过多,显示不完全,用省略号表示。
  3. 关于FileStream读取大文件问题
  4. fluery算法
  5. console下纯字符实现的贪吃蛇
  6. android下身份验证方式调用webservice
  7. bzoj 1090 [SCOI2003]字符串折叠(区间DP)
  8. shareplex的安装&amp;&amp;起停服务(添加新用户)
  9. sjtu1333 函数时代
  10. [转]How to compile GDB for iOS!
  11. 解决NetStream.appendBytes直播爆音的问题解决
  12. js内存深入学习(一)
  13. Windows下安装BeautifulSoup4显示&#39;You are trying to run the Python 2 version of Beautiful Soup under Python 3.(`python setup.py install`) or by running 2to3 (`2to3 -w bs4`).&#39;
  14. 匿名内部类中使用的外部局部变量为什么只能是final变量
  15. 关于select标签曾经踩过的几个坑!
  16. 看看大网站都用什么操作系统和Web服务器
  17. Windows 消息【二】窗口函数
  18. android 发送短信的两种方式,以及接收报告和发送报告
  19. 务实java基础之集合总结
  20. Java乱码解决之道

热门文章

  1. [jqpolt] formatString 日期格式化列表
  2. quartz + spring 启动项目时,报错The web application [] appears to have started a thread named.........
  3. Css问题 margin float 文档流 背景图底部充满
  4. WebStorm2018.2 破解 激活
  5. python 编码问题解决方案
  6. 如何用npm安装vue
  7. (转)基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动
  8. 16种C语言编译警告(Warning)类型的解决方法
  9. 自学python 第二天
  10. BZOJ 3674 可持久化并查集加强版(按秩合并版本)