Codeforces Round #260 (Div. 1) A - Boredom DP
点击打开链接
题意:
给你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相关推荐
- Codeforces Round #260 (Div. 2)
Codeforces Round #260 (Div. 2) 题目链接 A:水题,事实上仅仅要推断有没有一个ai != bi就可以,由于都保证是1 - n的不相等数字 B:找到2 3 4的循环节,发现 ...
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...
- Codeforces Round #131 (Div. 2) B. Hometask dp
题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...
- Codeforces Round #374 (Div. 2) C. Journey DP
C. Journey 题目连接: http://codeforces.com/contest/721/problem/C Description Recently Irina arrived to o ...
- Codeforces Round #387 (Div. 2) 747F(数位DP)
题目大意 给出整数k和t,需要产生一个满足以下要求的第k个十六进制数 即十六进制数每一位上的数出现的次数不超过t 首先我们先这样考虑,如果给你了0~f每个数字可以使用的次数num[i],如何求长度为L ...
- Codeforces Round #260 (Div. 1) C. Civilization(dfs+并查集)
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...
- Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...
- 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 ...
最新文章
- Java编程基础-运算符
- 皮克斯首款VR体验《寻梦环游记》登陆 Oculus Rift
- NFL原则告诉我们做决策的时候,试图找到一个能解决所有问题,“大而全”的方案是不存在的。我们应当找到最关心的问题,因地制宜做出选择。——聚焦目标,取舍有道!...
- wince 6.0 设备管理器架构(Device Manager Architecture)
- 白名单模板_亚马逊品牌备案常见问题—— 白名单、IP加速器及品牌备案后无法使用A+...
- 中国量子云计算机,量子云平台“中国版”拉开帷幕:国际首个基于核磁共振的量子计算云平台 | Science Bulletin...
- C语言 · 前10名
- 黑苹果系统坏了如何恢复_黑苹果macOS系统U盘版/恢复版基础安装教程
- mysql 回表 覆盖索引_mysql 14 覆盖索引+回表
- java 线程 内部_从Java中的main()内部在线程实例上运行wait()
- 手动脱壳-熊猫烧香病毒-FSG v2.0
- Windows网络编程(基础篇1)
- python龙卷风框架_WEB框架之Tornado
- jedate change事件监控,使用jedate无法使用change事件
- windows freeSSHd搭建SFtp服务器
- 微信小程序之点点考勤经验总结
- 计算机组装怎么备份系统,电脑怎么备份系统(高手教你win7系统怎么备份)
- C++ 学习记录(18) NVI
- 分享101个PHP源码,总有一款适合您
- Blender 画正四面体