CodeForces 456C - Boredom(DP)
来源:互联网 发布:中国海外间谍知乎 编辑:程序博客网 时间:2024/04/29 14:43
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 itak) and delete it, at that all elements equal toak + 1 andak - 1 also must be deleted from the sequence. That step bringsak 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.
21 2
2
31 2 3
4
91 2 1 3 2 2 2 2 3
10
Consider the third test example. At first step we need to choose any element equal to2. 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 to2. In total we earn 10 points.
/*题目链接: http://codeforces.com/problemset/problem/456/C题意:给定一个含有n个整数的数组,你可以进行多次操作,每次操作从数组选一个数a[k],然后将其删除,然后删除与a[k]-1和a[k]+1相等的数,然后可以得到a[k]分,求进行多次操作后得到的最多的分DP先将每个数*这个数的个数,得到选这个数所能得到的分然后DP, dp[i] = max( dp[i-1], 不选i这个数 dp[i-2] + val[i] 选i这个数 ) 要注意的是, 最终的答案不是dp[]这个数组的最后一个值 而是全部里面最大的那个HDU 2845 是这个题的升级版http://acm.hdu.edu.cn/showproblem.php?pid=2845*/#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <cmath>#include <stack>#include <string>#include <sstream>#include <map>#include <set>#define pi acos(-1.0)#define LL long long#define ULL unsigned long long#define inf 0x3f3f3f3f#define INF 1e18#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1using namespace std;typedef pair<int, int> P;const double eps = 1e-10;const int maxn = 1e5 + 5;const int N = 1e4 + 5;const int mod = 1e8;int a[maxn];int cnt[maxn];LL val[maxn], dp[maxn];int main(void){//freopen("in.txt","r", stdin); int n, maxx; while (cin >> n){ memset(cnt, 0, sizeof(cnt)); memset(dp, 0, sizeof(dp)); maxx = -1; for (int i = 1; i <= n; i++){ cin >> a[i]; cnt[a[i]]++; maxx = max(maxx, a[i]); } for (int i = 1; i <= maxx; i++) val[i] = (LL)cnt[i] * (LL)i; memset(dp, 0, sizeof(dp)); dp[1] = val[1]; for (int i = 2; i <= maxx; i++) dp[i] = max(dp[i-1], dp[i-2]+val[i]); LL ans = -1; for (int i = 1; i <= maxx; i++) ans = max(ans, dp[i]); cout << ans << endl; }return 0;}
- CodeForces 456C - Boredom(DP)
- Codeforces 456C Boredom DP
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
- codeforces #260 DIV 2 C题Boredom(DP)
- Codeforces Round #260 (Div. 2) C. Boredom(DP)
- Boredom - CodeForces #260 (Div. 2) C dp
- 【CodeForces 455A】Boredom(dp)
- Codeforces 853C Boredom
- Codeforces Round #260 (Div. 2) C. Boredom【DP】
- dp解Codeforces Round #260 (Div. 2)C. Boredom
- codeforces 455A Boredom dp
- 【dp】 codeforces 455A Boredom
- Codeforces 455A Boredom (dp)
- CodeForces 455A Boredom (dp)
- Codeforces 455A Boredom【dp】
- codeforces Boredom 455A dp
- Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
- Codeforces Round #260 (Div. 2)455A - Boredom (DP)
- 关于压缩jar包时提示*.*没有这个文件或目录的问题以及解决办法:
- 如何在 Linux 中启用 Shell 脚本的调试模式
- 数据结构的学习之路(三)--树
- Singleton
- weak_ptr源码分析
- CodeForces 456C - Boredom(DP)
- linux关于网络的命令介绍
- HDU 5934 Bomb(强连通缩点)
- CentOS安装MySQL与登录退出
- 运维请注意:”非常危险“的Linux命令大全
- HDU 5938 - Four Operation(贪心)
- Book 【GDKOI2017模拟1.21】
- c++之面向对象
- 非常可乐