1500*A. Boredom(DP)

Problem - 455A - Codeforces

Boredom - 洛谷

解析:

首先统计每个数的个数,并且统计出最大值mx。

问题转换为,从1-mx 中选择任意个数字,使其都不相邻,求最大的总和。

开始没有思路,以为直接选取偶数位和奇数位,然后求较大值。

正解位DP,dp i 如果不选则等于 dp i-1 ,如果选,则等于dp i-2 + i *cnt i ,遍历每次求最大值即可。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int n,x,cnt[N],mx,dp[N];
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&x);
		cnt[x]++;
		mx=max(mx,x);
	}
	dp[1]=cnt[1];
	for(int i=2;i<=mx;i++){
		dp[i]=max(dp[i-1],dp[i-2]+i*cnt[i]);
	}
	printf("%lld",dp[mx]);
	return 0;
}
相关推荐
大明者省几秒前
Ubuntu Python 部署终极版教程
开发语言·python·ubuntu
光影少年2 分钟前
Redux Toolkit 用法、解决原生Redux 冗余问题
开发语言·前端·javascript·react.js·中间件·前端框架·ecmascript
见合八方5 分钟前
【滤波器】热调谐FP滤波器
人工智能·算法
古城小栈6 分钟前
cargo-pprof:Rust性能调优
人工智能·算法·rust
KANGBboy7 分钟前
java知识二(数组)
java·开发语言·python
零陵上将军_xdr11 分钟前
后端转全栈学习-Day3-JavaScript 基础-1
开发语言·javascript·学习
llilay14 分钟前
企业级FastAPI后端模板搭建(二)整合路由Router
开发语言·python·fastapi
x_xbx16 分钟前
LeetCode:543. 二叉树的直径
算法·leetcode·职场和发展
汉克老师16 分钟前
GESP6级C++考试语法知识(三十九、动态规划的启蒙(四、二维DP))
c++·动态规划·dp·gesp六级·二维dp
QiLinkOS17 分钟前
QiLink 技术委员会选举实施细则
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源