codeforces_456C_dp
1 second
256 megabytes
standard input
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.
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).
Print a single integer — the maximum number of points that Alex can earn.
2
1 2
2
3
1 2 3
4
9
1 2 1 3 2 2 2 2 3
10
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.
比赛中遇到的dp题,比赛时没有思路,赛后有点思路但不完善,听了讲解后算是懂了,还需要多积累。
若取当前的值,则与其相邻的值就不能取,故状态转移方程:
dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
dp[i][1]=dp[i-1][0]+value[i];
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std; long long vis[];
long long dp[][];
long long value[];
int main()
{
int n,num;
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%d",&num);
vis[num]++;
}
int cnt=;
for(int i=;i<=1e5;i++)
{
dp[i][]=max(dp[i-][],dp[i-][]);
dp[i][]=dp[i-][]+vis[i]*i;
}
//cout<<dp[cnt-1][0]<<endl<<dp[cnt-1][1]<<endl;
printf("%I64d\n",dp[][]>dp[][]?dp[][]:dp[][]);
return ;
}
最新文章
- 沙盒解决方案解决SharePoint 2013 以其他身份登陆的问题
- XP 安装Oralce 10g 数据库
- windows系统nginx配置root绝对路径的问题
- ORACLE查看表空间对象
- hbase表结构设计
- 面试相关的技术问题---java基础
- Java使用JAX-WS来写webservice时 Unable to create JAXBContext
- CSS中Position属性
- Chromium如何显示Web页面
- BZOJ 4057: [Cerc2012]Kingdoms( 状压dp )
- 字典实体类:DictionaryEntry类
- ICC_lab总结——ICC_lab2:设计规划
- 使用JS控制伪元素的几种方法
- typescript简介
- 看懂 ,学会 .NET 事件的正确姿势-简单版
- .Net Core小技巧 - Swagger适配虚拟目录及二级目录
- head first c初探网络编程上
- Linux 源码安装 Python3
- 【SVN】SVN初识
- golang 创建一个简单的资源池,重用资源,减少GC负担
热门文章
- 魔兽 如何屏蔽F1键弹出帮助菜单
- poj3211Washing Clothes(字符串处理+01背包) hdu1171Big Event in HDU(01背包)
- NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat
- 【面试加分项】java自己定义注解之解析注解
- java 学习第一步---安装JDK以及配置环境变量
- What does jQuery.fn mean?
- bzoj3295 洛谷P3157、1393 动态逆序对——树套树
- JQuery操作下拉框
- 830C
- jQuery:has()和jQuery:contains()及jQuery:empty