Atcoder D - 3N Numbers(优先队列+dp)
题目链接:http://abc062.contest.atcoder.jp/tasks/arc074_b
题意:给出3*n个数要求去掉n个数使得剩下的前n个数-后n个数的差最大。
题解:显然是一道如果数据小直接dpf[i][j]表示前i个取j个最大是多少,dpe[i][j]后i个取j个最小是多少。
显然转移也是很明显的dpf[i][j]=max(dpf[i][j],dpf[i-1][j-1]+a[i]),dpe[i][j]=min(dpe[i][j],dpe[i+1][j-1]+a[i]);
但是数据有100000不能这么存但是依旧是dp
dpf[i]表示前i个取n个最大是多少,dpe[i]表示后i个取n个最小是多少,然后用优先队列维护一下。
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
using namespace std;
const int M = 3e5 + 10;
typedef long long ll;
int a[M];
struct cmp1 {
int x;
cmp1(int x):x(x) {}
bool operator < (const cmp1 &a) const {
return x > a.x;
}
};
struct cmp2 {
int x;
cmp2(int x):x(x) {}
bool operator < (const cmp2 &a) const {
return x < a.x;
}
};
ll dpf[M] , dpe[M];
int main() {
int n;
scanf("%d" , &n);
for(int i = 1 ; i <= 3 * n ; i++) {
scanf("%d" , &a[i]);
}
priority_queue<cmp1> st;
memset(dpf , 0 , sizeof(dpf));
memset(dpe , 0 , sizeof(dpe));
for(int i = 1 ; i <= n ; i++) {
st.push(cmp1(a[i]));
dpf[n] += (ll)a[i];
}
for(int i = n + 1 ; i <= 2 * n ; i++) {
int gg = st.top().x;
if(gg < a[i]) {st.pop() , st.push(cmp1(a[i])) , dpf[i] = dpf[i - 1] - (ll)gg + (ll)a[i];}
else dpf[i] = dpf[i - 1];
}
priority_queue<cmp2> ed;
for(int i = 2 * n + 1 ; i <= 3 * n ; i++) {
ed.push(cmp2(a[i]));
dpe[2 * n + 1] += (ll)a[i];
}
for(int i = 2 * n ; i >= n ; i--) {
int gg = ed.top().x;
if(gg > a[i]) {ed.pop() , ed.push(cmp2(a[i])) , dpe[i] = dpe[i + 1] - (ll)gg + (ll)a[i];}
else dpe[i] = dpe[i + 1];
}
ll ans = -10000000000000000;
for(int i = n ; i <= 2 * n ; i++) {
ans = max(ans , dpf[i] - dpe[i + 1]);
}
printf("%lld\n" , ans);
return 0;
}
Atcoder D - 3N Numbers(优先队列+dp)的更多相关文章
- Atcoder 2566 3N Numbers(优先队列优化DP)
問題文N を 1 以上の整数とします. 長さ 3N の数列 a=(a1,a2,…,a3N) があります. すぬけ君は.a からちょうど N 個の要素を取り除き.残った 2N 個の要素を元の順序で並べ. ...
- 3N Numbers
D - 3N Numbers Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Let N b ...
- UVA.136 Ugly Numbers (优先队列)
UVA.136 Ugly Numbers (优先队列) 题意分析 如果一个数字是2,3,5的倍数,那么他就叫做丑数,规定1也是丑数,现在求解第1500个丑数是多少. 既然某数字2,3,5倍均是丑数,且 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- Gym 100703G---Game of numbers(DP)
题目链接 http://vjudge.net/contest/132391#problem/G Description standard input/outputStatements — It' s ...
- codeforces 55D - Beautiful numbers(数位DP+离散化)
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- POJ1338Ugly Numbers(DP)
http://poj.org/problem?id=1338 第一反应就是DP,DP[i] = min{2*DP[j], 3*DP[k], 5*DP[p] j,k,p<i};于是枚举一下0-i- ...
- Codeforces Beta Round #51 D. Beautiful numbers 数位dp
D. Beautiful numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/p ...
- spoj Balanced Numbers(数位dp)
一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...
随机推荐
- codeforces 322 A Ciel and Dancing
题目链接 题意: 有n个男孩和m个女孩,他们要结对跳舞,每对要有一个女孩和一个男孩,而且其中一个要求之前没有和其他人结对,求出最大可以结多少对. 如图,一条线代表一对,只有这样三种情况. #inclu ...
- Extjs的使用总结笔记
一:Extjs自带验证 1.alpha //只能输入字母,无法输入其他(如数字,特殊符号等) 2.alphanum//只能输入字母和数字,无法输入其他 3.email//email验证,要求的格式是& ...
- Kafka学习(四)-------- Kafka核心之Producer
通过https://www.cnblogs.com/tree1123/p/11243668.html 已经对consumer有了一定的了解.producer比consumer要简单一些. 一.旧版本p ...
- 03、Swagger2和Springmvc整合详细记录(爬坑记录)
时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...
- Qt基于sqlite数据库的管理小软件
闲来无事,写了一个基于sqlite的数据库管理小软件. 先上图 中心思想就是: 创建一个数据库 然后每一个分组对应一个数据表 然后遍历该数据表.将名字以treewidgetItem显示出来.添加删除实 ...
- 喜大普奔 | 微信小程序支持PC端打开了
微信小程序可以在PC端打开啦 微信PC版发布了v2.7.0测试版,其中一个重磅的功能就是:支持打开聊天中分享的小程序 咖啡君这么喜欢尝鲜的人自然是在第一时间下载进行了体验 安装成功,会有功能更新说明 ...
- Install eclipse ns3 in ubuntu 14.04
1. NS3 install 参考NS3 tutorial即可. 2.eclipse 2.1下载 下载地址:http://www.eclipse.org/downloads/ ...
- 内存泄漏排查之:Show me your Memory
java 语言有个神奇的地方,那就是你时不时会去关注下内存.(当然了,任何牛逼的同学都应该关注内存) 今天我们就来这么场景吧:某应用运行了一段时间后,ecs监控报警了,内存比较高了,怎么办?随着时间的 ...
- Go中的结构体
前面我们或多或少的都使用了结构体这种数据结构,本身结构体也有很多特性,我们一一来看. 结构体的作用是将一个或者多个任一类型的变量组合在一起的数据类型,类似于我们在Java中class的作用.在结构体重 ...
- 【POJ - 2229】Sumsets(完全背包)
Sumsets 直接翻译了 Descriptions Farmer John 让奶牛们找一些数加起来等于一个给出的数N.但是奶牛们只会用2的整数幂.下面是凑出7的方式 1) 1+1+1+1+1+1+1 ...