gym102302E_Chi's performance
题意
给n个二元组(v,p),要求排序使得v从小到大,而且总价值最大,价值定义为相邻两个v值不同的p值之差绝对值之和。
分析
- in a row原来是相邻的意思。
- 对于每个相同v值的块来说,有用的数只有最大,次大,最小,次小,且如果块大小小于4,还有一些会重复,后面需要特判。
- 所以直接dp到每个块,左端点放哪个数,右端点放哪个数能获得的最大价值。
- 特判块大小为1的情况,以及上一个块大小为1的情况。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+50;
struct node{
int v,p;
bool operator<(const node& rhs)const{
if(v==rhs.v){
return p<rhs.p;
}else{
return v<rhs.v;
}
}
}a[N];
ll dp[N][5];
int mx[N][5],sz[N],num[N];
int n;
vector<int> v;
int main(){
// freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].v,&a[i].p);
v.push_back(a[i].v);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
for(int i=1;i<=n;i++){
a[i].v=lower_bound(v.begin(),v.end(),a[i].v)-v.begin()+1;
}
sort(a+1,a+1+n);
int t=1;
vector<int> tp;
tp.push_back(a[1].p);
for(int i=2;i<=n;i++){
if(a[i].v==a[i-1].v){
t++;
tp.push_back(a[i].p);
}else{
sz[a[i-1].v]=t;
if(t>=2){
mx[a[i-1].v][3]=tp[t-1];
mx[a[i-1].v][2]=tp[t-2];
mx[a[i-1].v][1]=tp[1];
mx[a[i-1].v][0]=tp[0];
}else{
num[a[i-1].v]=a[i-1].p;
}
t=1;
tp.clear();
tp.push_back(a[i].p);
}
}
sz[a[n].v]=t;
if(t>=2){
mx[a[n].v][3]=tp[t-1];
mx[a[n].v][2]=tp[t-2];
mx[a[n].v][1]=tp[1];
mx[a[n].v][0]=tp[0];
}else{
num[a[n].v]=a[n].p;
}
int vs=v.size();
for(int i=2;i<=vs;i++){
if(sz[i]==1){
for(int j=0;j<=3;j++){
if(sz[i-1]==1){
dp[i][j]=dp[i-1][0]+abs(num[i]-num[i-1]);
}else{
for(int l=0;l<=3;l++){
dp[i][j]=max(dp[i][j],dp[i-1][l]+abs(num[i]-mx[i-1][l]));
}
}
}
}else{
if(sz[i-1]==1){
for(int j=0;j<=3;j++){
for(int k=0;k<=3;k++){
if(j==k || (sz[i]==2 && (j+k==2 || j+k==4)) || (sz[i]==3 && ( (j && k) && (j+k==3)))){
continue;
}
dp[i][j]=max(dp[i][j],dp[i-1][0]+abs(mx[i][k]-num[i-1]));
}
}
}else{
for(int j=0;j<=3;j++){
for(int k=0;k<=3;k++){
if(j==k || (sz[i]==2 && (j+k==2 || j+k==4)) || (sz[i]==3 && ( (j && k) && (j+k==3)))){
continue;
}
for(int l=0;l<=3;l++){
dp[i][j]=max(dp[i][j],dp[i-1][l]+abs(mx[i][k]-mx[i-1][l]));
}
}
}
}
}
}
ll ans=0;
for(int i=0;i<=3;i++){
ans=max(ans,dp[vs][i]);
}
printf("%lld\n",ans);
return 0;
}
gym102302E_Chi's performance的更多相关文章
- Performance Monitor4:监控SQL Server的IO性能
SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Applicati ...
- Performance Tuning
本文译自Wikipedia的Performance tuning词条,原词条中的不少链接和扩展内容非常值得一读,翻译过程中暴露了个人工程学思想和英语水平的不足,翻译后的内容也失去很多准确性和丰富性,需 ...
- Performance Monitor3:监控SQL Server的内存压力
SQL Server 使用的资源受到操作系统的调度,同时,SQL Server在内部实现了一套调度算法,用于管理从操作系统获取的资源,主要是对内存和CPU资源的调度.一个好的数据库系统,必定在内存中缓 ...
- [MySQL Reference Manual] 23 Performance Schema结构
23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...
- 使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题
一.前言 最近一段时间,网站经常出现两个问题: 1.内存占用率一点点增高,直到将服务器内存占满. 2.访问某个页面时,页面响应过慢,CPU居高不下. 初步判断内存一点点增多可能是因为有未释放的资源一直 ...
- KPI:Key Performance Indicator
通信中KPI,是Key Performance Indicators的缩写,意思是关键性能指标.performance 还有绩效:业绩的意思,但显然不适用于这种场合. 通信中KPI的内容有:掉话率.接 ...
- Performance Monitor1:开始性能监控
Performance Monitor是Windows内置的一个可视化监控工具,能够在OS级别上实时记录系统资源的使用情况,通过收集和存储日志数据,在SQL Server发生异常时,能够还原系统当时的 ...
- Performance Monitor2:Peformance Counter
Performance Counter 是量化系统状态或活动的一个数值,Windows Performance Monitor在一定时间间隔内(默认的取样间隔是15s)获取Performance Co ...
随机推荐
- drf 框架
一. drf简介 drf框架,全程: django-rest framework , rest是插件名字,django插件的名字叫rest,framework是框架的意思 二. 接口 在平时生活 ...
- 旧瓶新酒-获取网络资源即爬取下载页面内容(图片、html、css、js等)
这个java获取网络资源以前也写过不少 最近用到又重新写了一个,apache.commons.io中的例子就非常好,但是无法对请求进行详细设置 于是大部分照搬,局部替换以设置请求头 如需更加复杂的设置 ...
- Jmeter Json List Element Assertion使用详解
使用背景: jmeter4.0本身提供json Assertion断言,但当我们想要对返回的json list中的多个字段进行断言的时候,我们就会感到很无力.那么此时我们就可以通过Json List ...
- Python 爬虫从入门到进阶之路(十)
之前的文章我们介绍了一下 Python 中正则表达式和 re 模块来做一个案例,爬取<糗事百科>的糗事并存储到本地.本章我们来看一下另一种爬取数据的方式 XPath. 我们在前面爬取< ...
- Ubuntu16.04安装Docker、nvidia-docker
Ubuntu16.04安装Docker.nvidia-docker Docker安装 1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选) sudo cp /etc/apt/sources.l ...
- asp.net core 使用 AccessControlHelper 控制访问权限
asp.net core 使用 AccessControlHelper 控制访问权限 Intro 由于项目需要,需要在基于 asp.net mvc 的 Web 项目框架中做权限的控制,于是才有了这个权 ...
- linux服务器搭建--将win10换成linux
在这里说记录一下自己装linux的步骤,如果也有需要的朋友可以参看下: 1.目前win10的系统装成inux系统有3个解决办法: 第一:win10装linux子系统,网上已经有很多教程,步骤很简单 第 ...
- 基于powershell的socks代理
0x01 前言 在实战中,内网的代理尤其重要,而常见的端口转发被反病毒软件已经盯死,那么学习使用基于powershell的渗透脚本进行代理.端口转发的非常有必要的. 0x02 使用 介绍ithub: ...
- Neo4j:图数据库GraphDB(一)入门和基本查询语句
图数据库的代表:Neo4j 官网: http://neo4j.com/ 引言:为什么使用图数据库 在很多新型项目中,应用图数据库已经是势在必行的趋势了,因为图数据库可以很好的表示各种节点与关系的概念 ...
- docker3-镜像的使用
基本使用命令: [root@ipha-dev71- docker]# docker search python # 搜索镜像 [root@ipha-dev71- docker]# docker pul ...