[CodeForce455A]Boredom
题面描述
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.
给定一个由n个整数组成的序列。玩家可以做几个步骤。在单个步骤中,他可以选择序列的元素(假设为\(a_k\))并删除它,此时,所有等于\(a_k+1和a_k-1\)的元素也必须从序列中删除。这个步骤给玩家带来\(a_k\)点数。
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).
第一行包含一个整数n(\(1≤n≤105\)),表示Alex序列中有多少个数字。
第二行包含n个整数\(a1,a2,…,an(1≤105)\)
输出格式
输出一个整数——Alex可以获得的最大点数
样例
样例输入
9
1 2 1 3 2 2 2 2 3
样例输出
10
题解
先求出数列中每一个数字k的出现次数num[k]
考虑取任意一个数\(x\)时只会影响到\(x+1\)和\(x-1\),我们可以先设dp[i]表示选取num后可以取得的最大值。因为任意取两个数\(a和b\),若选取\(a\)后可以选取\(b\),则选取\(b\)后可以选取\(a\),因此我们只考虑\(x与x-1\)之间的关系。这样我们就很容易得到递推式:
0 && i=0\\
num[1]*1 && i=1\\
max(dp[i-1],dp[i-2]+num[i]*i) && else
\end{cases}
\]
注意,最后一重for循环要从2循环至已知的maxn
#include<bits/stdc++.h>
#define maxn 1000050
using namespace std;
inline char get(){
static char buf[3000],*p1=buf,*p2=buf;
return p1==p2 && (p2=(p1=buf)+fread(buf,1,3000,stdin),p1==p2)?EOF:*p1++;
}
inline long long read(){
register char c=getchar();register long long f=1,_=0;
while(c>'9' || c<'0')f=(c=='-')?-1:1,c=getchar();
while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=getchar();
return _*f;
}
long long note,n,a[maxn],dp[maxn];
long long op=0;
int main(){
//freopen("1.txt","r",stdin);
n=read();
for(register long long i=1;i<=n;i++)a[i]=read(),dp[a[i]]+=a[i],note=max(note,a[i]);
for(register long long i=2;i<=note;i++)dp[i]=max(dp[(i)-1],dp[(i)-2]+dp[i]),op=max(dp[i],op);
cout<<op<<endl;
return 0;
}
[CodeForce455A]Boredom的更多相关文章
- CF456C Boredom (DP)
Boredom CF#260 div2 C. Boredom Codeforces Round #260 C. Boredom time limit per test 1 second memory ...
- Codeforces Round #260 (Div. 1) A - Boredom DP
A. Boredom Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/problem/A ...
- CodeForces 455A Boredom (DP)
Boredom 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/G Description Alex doesn't like b ...
- cf455A Boredom
A. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
C. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- Boredom
Alex doesn't like boredom. That's why whenever he gets bored, he comes up with games. One long winte ...
- [Codeforces Round #433][Codeforces 853C/854E. Boredom]
题目链接:853C - Boredom/854E - Boredom 题目大意:在\(n\times n\)的方格中,每一行,每一列都恰有一个被标记的方格,称一个矩形为漂亮的当且仅当这个矩形有两个角是 ...
- CodeForces 456-C Boredom
题目链接:CodeForces -456C Description Alex doesn't like boredom. That's why whenever he gets bored, he c ...
- CF 455A Boredom
A. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
随机推荐
- JZ2440学习笔记之IIS音频芯片WM8976
音频芯片的接线图:IIS接到MPU的IIS controller上:看L3总线的接法,应该是使用GPIO来模拟时序. IIS总线用来传输音频数据. L3总线用来配置WM8976的内部寄存器. L3总线 ...
- 【luogu P1073 最优贸易】 题解
题目链接:https://www.luogu.org/problemnew/show/P1073 对于状态量相互影响的题目,分层图是个不错的想法. 考虑在题目中分为: 不交易: 直接从1到n出去,为0 ...
- TextView selector 在LinearLayout中获取焦点问题
通常需要修改textview被选中时文字颜色,总是没效果,有以下几种方式可以实现: <?xml version="1.0" encoding="utf-8" ...
- HDU 1286 找新朋友 (欧拉公式或者标记法(其实就是欧拉公式的思想))
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1286 找新朋友 Time Limit: 2000/1000 MS (Java/Others) M ...
- 为类型“xxxx”多次调用了 Map,且其中至少有一个调用未指定目标表名称。
ef的继承映射真的是能搞死人啊...小结一下: 下图中的代码,ResponseTextMessage.ResponseNewsMessage.ResponseMethodMessage等几个类都是Re ...
- win7利用winSCP上传文件到ubuntu server
1.为ubuntu server设置root密码: sudo passwd root 先设密码在登录 2. su root进入root账户: 3.安装SSH:sudo apt-get install ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator
一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JD ...
- Linux -- 用户篇
Linux -- 用户与用户组 1.Linux 系统中有三种角色:所有者(用户),用户组与其他人,一张图可以说明用户与用户组的关系. 如图,某公司相当于一个用户组,该用户组下有A,B两个用户,用户拥有 ...
- IF()判断变量是否为空
一 变量是字符串,判断为空 第一种:strs == null string strs = "test"; if (strs == null) { //这里是为空的字符串,返回你指定 ...
- python3 练习题100例 (三)
题目三:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? #!/usr/bin/env python3 # -*- coding: utf-8 -*- &qu ...