Codeforces Round #260 (Div. 2)C. Boredom(dp)
来源:互联网 发布:一起来做淘宝 编辑:程序博客网 时间:2024/05/16 04:48
给出n个数,每次可以选择消除一个值为ai的数,那么所有ai-1,ai+1的数也会被消掉,同时会获得值ai,问最多可以获得多少?
看完题就可想到这应该是一个dp问题,首先,哈希一下,存下每个数的个数放在p中,消除一个数i,会获得p[i]*i的值(因为可以消除p[i]次),如果从0的位置开始向右消去,那么,消除数i时,i-1可能选择了消除,也可能没有,如果消除了i-1,那么i值就已经不存在,dp[i] = dp[i-1],如果没有被消除,那么dp[i] = dp[i-2]+ p[i]*i。
那么初始的dp[0] = 0 ; dp[1] = p[1] ;得到了公式 dp[i] = max(dp[i-1],dp[i-2]+p[i]*i).
#include <cstdio>#include <cstring>#include <algorithm>#define LL __int64using namespace std;LL p[110000] , dp[110000] ;int main(){ LL i , n , x , maxn = -1; memset(p,0,sizeof(p)); memset(dp,0,sizeof(dp)); scanf("%I64d", &n); for(i = 1 ; i <= n ; i++) { scanf("%I64d", &x); if(x > maxn) maxn = x ; p[x]++ ; } dp[1] = p[1] ; for(i = 2 ; i <= maxn ; i++) { dp[i] = max( dp[i-1],dp[i-2]+p[i]*i ); } printf("%I64d\n", dp[maxn]); return 0;}
2 0
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
- Codeforces Round #260 (Div. 2) C. Boredom(DP)
- Codeforces Round #260 (Div. 2) C. Boredom【DP】
- dp解Codeforces Round #260 (Div. 2)C. Boredom
- Codeforces Round #260 (Div. 2)455A - Boredom (DP)
- Codeforces Round #260 (Div. 2) C. Boredom
- Codeforces Round #260 (Div. 2) C Boredom
- Codeforces Round #260 (Div. 2)C. Boredom
- Boredom - CodeForces #260 (Div. 2) C dp
- codeforces #260 DIV 2 C题Boredom(DP)
- Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
- Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
- Codeforces Round #260 (Div. 2)——C. Boredom
- Codeforces Round #260 (Div. 1) A. Boredom
- Codeforces Round #260 (Div. 1) A. Boredom
- Codeforces Round #260 (Div. 1) A. Boredom
- Codeforces Round #433 (Div. 2) E. Boredom
- Codeforces Round #260 (Div. 2) C (DP)
- ios中KeyChain用途
- codeforces #260 A. Laptops(水)
- VS2013常用快捷键
- VS2012常用设置
- Android OpenGL ES 开发教程(5):关于EGL
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
- 工作第六天日志
- 说明:
- NDK编译cpp和c文件
- cocos2d-x与c++学习1
- STL 之 iterator traits 备忘
- MinGW VS Cygwin
- codeforces #260 B. Fedya and Maths(水)
- IE浏览器兼容问题解决办法