点击打开链接

题意:

给你n个数,你每次可以选择删除去一个数x,但是等于x+1和等于x-1的数都得删去

你每一次操作可以得x分

思路一:

dp[i]表示到i后能够得到的最大分数

dp[i]=max(dp[i-1],dp[i-2]+a[i]*i;

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 1e5+10;
 5 inline ll read(){
 6     ll x=0,f=1;char ch=getchar();
 7     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 8     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
 9     return x*f;
10 }
11
12 ll a[maxn],dp[maxn];
13
14 int main(){
15     int n;
16     cin >> n;
17     for(int i=1; i<=n; i++){
18         ll x; cin >> x;
19         a[x]++;
20     }
21
22     memset(dp,0,sizeof(dp));
23
24     for(int i=1; i<maxn; i++){
25         dp[i] = max(dp[i-1],dp[i-2]+a[i]*i);
26     }
27
28     cout << dp[maxn-1] << endl;
29
30     return 0;
31 }

思路二:

用计数排序统计数字的个数

dp[ i ][ 0 ]表示不删除 i ,dp[ i ][ 1 ]表示删除 i

dp[ i ][ 0 ] = max( dp[ i-1 ][ 1 ] , dp[ i-1 ][ 0 ] );
dp[ i ][ 1 ] = dp[ i-1 ][ 0 ] + i * a[ i ];

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 1e5+10;
 5 const int INF = 0x3f3f3f3f;
 6 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
 7 inline ll read(){
 8     ll x=0,f=1;char ch=getchar();
 9     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
10     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
11     return x*f;
12 }
13 //
14
15 ll a[maxn],dp[maxn][2];
16 int mx=-1;
17
18 int main(){
19     int n; n = read();
20     for(int i=1; i<=n; i++){
21         int x; x = read();
22         a[x]++;
23         mx = max(x,mx);
24     }
25
26     for(int i=1; i<=mx; i++){
27         dp[i][1] = dp[i-1][0]+a[i]*i;    // dp[i][1] 表示这个数删
28         dp[i][0] = max(dp[i-1][1],dp[i-1][0]); // dp[i][0] 表示这个数不删
29     }
30
31     cout << max(dp[mx][0],dp[mx][1]) << endl;
32     return 0;
33 }

滚动优化:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 1e5+10;
 5 const int INF = 0x3f3f3f3f;
 6 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
 7 inline ll read(){
 8     ll x=0,f=1;char ch=getchar();
 9     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
10     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
11     return x*f;
12 }
13 //
14
15 ll a[maxn],dp[2][2];
16 int mx=-1;
17
18 int main(){
19     int n; n = read();
20     for(int i=1; i<=n; i++){
21         int x; x = read();
22         a[x]++;
23         mx = max(x,mx);
24     }
25
26     int now = 0, pre = 1;;
27     for(int i=1; i<=mx; i++){
28
29         dp[now][1] = dp[pre][0]+a[i]*i;    // dp[now][1] 表示这个数删
30         dp[now][0] = max(dp[pre][1],dp[pre][0]); // dp[now][0] 表示这个数不删
31         swap(now, pre);
32     }
33
34     dp[now][0] = max(dp[now][0],dp[pre][0]);
35     dp[now][1] = max(dp[now][1],dp[pre][1]);
36
37     ll ans = max(dp[now][0],dp[now][1]);
38     cout << ans << endl;
39
40     return 0;
41 }

转载于:https://www.cnblogs.com/yxg123123/p/6827721.html

Codeforces Round #260 (Div. 1) A - Boredom DP相关推荐

  1. Codeforces Round #260 (Div. 2)

    Codeforces Round #260 (Div. 2) 题目链接 A:水题,事实上仅仅要推断有没有一个ai != bi就可以,由于都保证是1 - n的不相等数字 B:找到2 3 4的循环节,发现 ...

  2. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

    题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...

  3. Codeforces Round #131 (Div. 2) B. Hometask dp

    题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...

  4. Codeforces Round #374 (Div. 2) C. Journey DP

    C. Journey 题目连接: http://codeforces.com/contest/721/problem/C Description Recently Irina arrived to o ...

  5. Codeforces Round #387 (Div. 2) 747F(数位DP)

    题目大意 给出整数k和t,需要产生一个满足以下要求的第k个十六进制数 即十六进制数每一位上的数出现的次数不超过t 首先我们先这样考虑,如果给你了0~f每个数字可以使用的次数num[i],如何求长度为L ...

  6. Codeforces Round #260 (Div. 1) C. Civilization(dfs+并查集)

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  8. Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

    Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...

  9. Codeforces Round #507 (Div. 1) D. You Are Given a Tree 根号分治 + dp

    传送门 题意: 有一颗nnn个节点的树,其中一个简单路径集合被称为kkk合法当且仅当: 树的每个节点至多属于一条路径,且每条路径恰好包含kkk个点. 对于k∈[1,n]k\in [1,n]k∈[1,n ...

最新文章

  1. Java编程基础-运算符
  2. 皮克斯首款VR体验《寻梦环游记》登陆 Oculus Rift
  3. NFL原则告诉我们做决策的时候,试图找到一个能解决所有问题,“大而全”的方案是不存在的。我们应当找到最关心的问题,因地制宜做出选择。——聚焦目标,取舍有道!...
  4. wince 6.0 设备管理器架构(Device Manager Architecture)
  5. 白名单模板_亚马逊品牌备案常见问题—— 白名单、IP加速器及品牌备案后无法使用A+...
  6. 中国量子云计算机,量子云平台“中国版”拉开帷幕:国际首个基于核磁共振的量子计算云平台 | Science Bulletin...
  7. C语言 · 前10名
  8. 黑苹果系统坏了如何恢复_黑苹果macOS系统U盘版/恢复版基础安装教程
  9. mysql 回表 覆盖索引_mysql 14 覆盖索引+回表
  10. java 线程 内部_从Java中的main()内部在线程实例上运行wait()
  11. 手动脱壳-熊猫烧香病毒-FSG v2.0
  12. Windows网络编程(基础篇1)
  13. python龙卷风框架_WEB框架之Tornado
  14. jedate change事件监控,使用jedate无法使用change事件
  15. windows freeSSHd搭建SFtp服务器
  16. 微信小程序之点点考勤经验总结
  17. 计算机组装怎么备份系统,电脑怎么备份系统(高手教你win7系统怎么备份)
  18. C++ 学习记录(18) NVI
  19. 分享101个PHP源码,总有一款适合您
  20. Blender 画正四面体

热门文章

  1. 解决局域网IP冲突的问题
  2. C#中EventLog的使用
  3. 最全 | Redis可视化工具横向评测
  4. 知乎基于Kubernetes的kafka平台的设计和实现
  5. Java 8系列之Lambda表达式
  6. vscode 一些基本知识
  7. java表单自动绑定数据_java工作流系统表单自动 获取数据
  8. 弱电工程计算机网络系统基础知识
  9. ae万能弹性表达式_外置常用ae插件 快速掌握AE软件的精髓
  10. ML:文本、图像等数值化数据相似度计算之余弦相似度计算三种python代码实现