题目大意:

给你一个由 \(n\) 个整数构成的序列 \(a\),玩家可以进行几个步骤,每一步他可以选择序列中的一个元素(我们把它的值定义为 \(a_k\))并删除它,此时值等于 \(a_{k + 1}\) 和 \(a_{k - 1}\) 的所有元素也都必须从序列中被删除。这次操作会给玩家加 \(a_k\) 分。

  在样例这一数据中,我们先删除一个 \(2\) ,以此删去所有的 \(1,3\),得到一个全为 \(2\) 的序列,接下来,我们无论如何删除,都不会将 \(2\) 删去。由此我不禁产生了一个想法:是不是得到一个全部数字相等的序列,再挨个删除,就可以使结果最大化呢?

  显然,这样的思考不够全面。于是想到了动态规划。因为 \(1≤ {a_i} ≤ {10^5}\),不妨将数字定为状态,\(dp[i]\) 表示将前 \(i\) 种数删除完后所能得到的最大分数。因为每删除一个 \(i\),\(i - 1\) 和 \(i + 1\) 这两种数都要被删除,而若想保留 \(i\) ,就只能删除 \(i - 2\),于是我们不难得到如下的状态转移方程:

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

(其中 \(a[i]\) 表示在输入的数据中 \(i\) 出现的次数)

AC代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
long long a[N];//记录i出现的次数
long long dp[N];
int main(){
int n;
cin >> n;
for(int i = 1;i <= n;i++){
int x;
cin >> x;
a[x]++;
}
dp[1] = a[1];
for(int i = 2;i <= 100002;i++){
dp[i] = max(dp[i-1],dp[i-2]+i*a[i]);
}
cout<< dp[100002]<<endl;
return 0;
}

CF455ABoredom的更多相关文章

随机推荐

  1. RocketMq 完整部署

    目录 RocketMq 部署 环境 物理机部署 自定义日志目录 自定义参数和数据存放位置 服务启动 启动name server 启动broker 关停服务 尝试发送消息 常见报错 部署 rockerm ...

  2. spring boot 集成 rabbitmq 指南

    先决条件 rabbitmq server 安装参考 一个添加了 web 依赖的 spring boot 项目 我的版本是 2.5.2 添加 maven 依赖 <dependency> &l ...

  3. Android shape与selector标签使用

    原文地址:Android shape与selector标签使用 Android中提供一种xml的方式,让我们可以自由地定义背景,比较常用的就是shape标签和selector标签 shape shap ...

  4. STM32 CubeMx使用教程

    一.STM32CubeMX 简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以 ...

  5. vue运行npm run dev时候,自动打开页面

    在config/index.js找到dev:{}里面的autoOpenBrowser: 设置为true,重新npm run dev一次就自动弹出浏览器页面啦!

  6. MVC - MVC的工作流程

    MVC 是Model-View-Controller的简写."Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应 ...

  7. SQL Server之自动创建视图

    本方法只适合特定模式的视图创建. 比如,创建需要整张表列名的视图,或者当表和需要的列名统计在一张数据表当中,如图所示: 首先要先获取要创建视图所需要的表,这里我获取的是整个数据库中的表, IF OBJ ...

  8. 如何优化PlantUML流程图(时序图)

    这篇文章用来介绍,如何画出好看的流程图. 1. 选择合适的组件 1.1 plantuml官方提供的组件 1.2 加载图片 1.2.1 加载本地图片 1.2.2 加载网络图片 1.2.3 图片资源 2. ...

  9. Camunda如何适配国产数据库达梦

    前言 camunda流程引擎官方支持的数据库有:MySQL .MariaDB .Oracle .DB2 .PostgreSQL .SQL Server.H2.对于其他类型的数据库如何支持,尤其是国产数 ...

  10. 【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

    核心逻辑概述 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. ThreadPoolExecu ...