問題文
N を 1 以上の整数とします。

長さ 3N の数列 a=(a1,a2,…,a3N) があります。 すぬけ君は、a からちょうど N 個の要素を取り除き、残った 2N 個の要素を元の順序で並べ、長さ 2N の数列 a' を作ろうとしています。 このとき、a' のスコアを (a'の前半N要素の総和)−(a'の後半N要素の総和) と定義します。

a' のスコアの最大値を求めてください。

制約
1≤N≤105
ai は整数である。
1≤ai≤109
部分点
300 点分のテストケースでは、N≤1,000 が成り立つ。
入力
入力は以下の形式で標準入力から与えられる。

N
a1 a2 … a3N
出力
a' のスコアの最大値を出力せよ。

入力例 1
Copy
2
3 1 4 1 5 9
出力例 1
Copy
1
a2, a6 を取り除くと、a'=(3,4,1,5) となり、スコアは (3+4)−(1+5)=1 となります。

入力例 2
Copy
1
1 2 3
出力例 2
Copy
-1
例えば、a1 を取り除くと、a'=(2,3) となり、スコアは 2−3=−1 となります。

入力例 3
Copy
3
8 2 2 7 4 6 5 3 8
出力例 3
Copy
5
例えば、a2, a3, a9 を取り除くと、a'=(8,7,4,6,5,3) となり、スコアは (8+7+4)−(6+5+3)=5 となります。

题意: 给出3n个数,让你去掉n个数,使剩下的前n个数的和减去后n个数的和的差最大,求这个差

题解:很容易可以写出O(n^3)的状态转移方程,然后考虑优化,可以用优先队列把O(n^2)压缩成O(logn)的,详情见代码

代码如下:

#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 1000000007
using namespace std; int n;
long long dp1[],dp2[],a[],sum1,sum2; priority_queue<long long,vector<long long>,greater<long long> > q;
priority_queue<long long> q2; int main()
{
//fuck!!!
scanf("%d",&n);
memset(dp1,,sizeof(dp1));
memset(dp2,0x3f,sizeof(dp2));
for(int i=;i<=*n;i++)
{
scanf("%lld",&a[i]);
}
for(int i=;i<=n;i++)
{
q.push(a[i]);
sum1+=a[i];
}
dp1[n]=sum1;
for(int i=n+;i<=*n;i++)
{
if(q.top()<a[i])
{
sum1-=q.top();
sum1+=a[i];
q.pop();
q.push(a[i]);
}
dp1[i]=sum1;
}
for(int i=*n;i>*n;i--)
{
q2.push(a[i]);
sum2+=a[i];
}
dp2[*n+]=sum2;
for(int i=*n;i>=;i--)
{
if(q2.top()>a[i])
{
sum2-=q2.top();
sum2+=a[i];
q2.pop();
q2.push(a[i]);
}
dp2[i]=sum2;
}
long long ans=-0x3f3f3f3f3f3f3f3f;
for(int i=n;i<=*n;i++)
{
ans=max(ans,dp1[i]-dp2[i+]);
}
printf("%lld\n",ans);
}

Atcoder 2566 3N Numbers(优先队列优化DP)的更多相关文章

  1. ZOJ 3632 K - Watermelon Full of Water 优先队列优化DP

    K - Watermelon Full of Water Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld &am ...

  2. Atcoder D - 3N Numbers(优先队列+dp)

    题目链接:http://abc062.contest.atcoder.jp/tasks/arc074_b 题意:给出3*n个数要求去掉n个数使得剩下的前n个数-后n个数的差最大. 题解:显然是一道如果 ...

  3. XJOI3602 邓哲也的矩阵(优先队列优化DP)

    题目描述: 有一个 n×m的矩阵,现在准备对矩阵进行k次操作,每次操作可以二选一 1: 选择一行,给这一行的每一个数减去p,这种操作会得到的快乐值等于操作之前这一行的和 2: 选择一列,给这一列的每一 ...

  4. HDU 3045 Picnic Cows(斜率优化DP)

    Picnic Cows Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. Parade(单调队列优化dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    ...

  6. 3N Numbers

    D - 3N Numbers Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Let N b ...

  7. POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 16178   Accepted: 526 ...

  8. hdu3507Print Article(斜率优化dp)

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  9. bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)

    题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...

随机推荐

  1. SVN专题(Visual SVN Server + TortoiseSVN + Visual SVN)

    参考资料: 1.Windows环境下搭建SVN服务器.原文地址:https://blog.csdn.net/lu1024188315/article/details/74082227 2.Git|SV ...

  2. Netty心跳之IdleStateHandler

    Netty提供了对心跳机制的天然支持,心跳可以检测远程端是否存活,或者活跃 今天我们就一起初识一下Netty4的心跳机制 Netty4.0提供了一个类,名为IdleStateHandler,这个类可以 ...

  3. git之常用命令

    git之常用命令 1.下载远程仓库最新代码 $ git pull --rebase origin master 2.上传代码 $ git push origin master 3.退出编辑 ESC + ...

  4. C#做的在线升级小程序

    转自原文C#做的在线升级小程序 日前收到一个小任务,要做一个通用的在线升级程序.更新的内容包括一些dll或exe或.配置文件.升级的大致流程是这样的,从服务器获取一个更新的配置文件,经过核对后如有新的 ...

  5. mongodb(二)

    数据准备: var persons = [{ name:"jim", age:25, email:"75431457@qq.com", c:89,m:96,e: ...

  6. ajax 回调函数

    回调函数 如果要处理$.ajax()得到的数据,则需要使用回调函数.beforeSend.error.dataFilter.success.complete. beforeSend 在发送请求之前调用 ...

  7. 转 Jquery实际应用,判断radio,selelct,checkbox是否选中及选中的值

    jquery取radio单选按钮的值   $("input[name='items']:checked").val();  另:判断radio是否选中并取得选中的值  如下所示: ...

  8. SignalR web实时同步 消息推送 广播

    源码:https://github.com/SignalR/SignalR demo:http://download.csdn.net/download/qq_21533697/9702791#com ...

  9. Unity Mecanim 动画系统

    1. Animator 组件 Controller:使用的Animator Controller文件. Avatar:使用的骨骼文件. Apply Root Motion:绑定该组件的GameObje ...

  10. 简述amixer及其用法

    最近接触到amixer,大概明白了其意思和具体用法,简述如下. alsamixer是Linux 音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数. alsamixer是基于文本下的图 ...