传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1237

题目大意:你有n 个整数Ai和n 个整数Bi。你需要把它们配对,即每个Ai恰好对应一 个Bp[i]。要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配 对。例如A=                   {5,6,8},B={5,7,8},则最优配对方案是5配8, 6配5, 8配7,配对整数 的差的绝对值分别为2, 2, 1,和为5。注意,5配5,6配7,8配8是不允许的,因 为相同的数不               许配对。

题解:先排序,如果没有相同的我们就可以一一对应来求,(自己可以证明一下)。

  有相同的的怎么办?我们注意到一点:保证所有 Ai各不相同,Bi也各不相同。

  于是我们又有一个不加以证明的结论:我们得出最优解,移动匹配的位数不超过3,于是dp即可.

代码:

 #include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#define inf 21000000000000000ll
#define N 1000005
#define ll long long
using namespace std;
int n;
int a[N],b[N];
ll f[N];
int read()
{
int x=; char ch; bool bo=;
while (ch=getchar(),ch<''||ch>'') if (ch=='-') bo=;
while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='');
if (bo) return -x; return x;
}
ll get(int x,int y)
{
if (x==y) return inf/ ; else return abs(x-y);
}
void solve()
{
f[]=get(a[],b[]);
f[]=min(f[]+get(a[],b[]),get(a[],b[])+get(b[],a[]));
for (int i=; i<=n; i++)
{
f[i]=f[i-]+get(a[i],b[i]);
f[i]=min(f[i],f[i-]+get(a[i],b[i-])+get(a[i-],b[i]));
f[i]=min(f[i],f[i-]+min(get(a[i],b[i-])+get(a[i-],b[i-])+get(a[i-],b[i]),
get(a[i],b[i-])+get(a[i-],b[i])+get(a[i-],b[i-])));
}
if (f[n]>=inf/) printf("-1\n");
else printf("%lld\n",f[n]);
}
int main()
{
n=read();
for (int i=; i<=n; i++)
{
a[i]=read(),b[i]=read();
}
sort(a+,a+n+); sort(b+,b+n+);
solve();
}

BZOJ1237: [SCOI2008]配对的更多相关文章

  1. bzoj千题计划179:bzoj1237: [SCOI2008]配对

    http://www.lydsy.com/JudgeOnline/problem.php?id=1237 如果没有相同的数不能配对的限制 那就是排好序后 Σ abs(ai-bi) 相同的数不能配对 交 ...

  2. 洛谷 P2507 [SCOI2008]配对

    P2507 [SCOI2008]配对 题目背景 四川NOI2008省选 题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值 ...

  3. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  4. 洛谷P2507 [SCOI2008]配对

    题目背景 四川NOI2008省选 题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对. ...

  5. [SCOI2008]配对

    题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对.例如A={5,6,8},B={5, ...

  6. 洛谷P2507 [SCOI2008]配对 [DP,贪心]

    题目传送门 配对 题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对.例如A={5,6 ...

  7. 1237: [SCOI2008]配对

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1789  Solved: 715[Submit][Status][Discuss] Descripti ...

  8. P2507 [SCOI2008]配对

    题目背景 四川NOI2008省选 题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对. ...

  9. [SCOI2008]配对 (贪心,动态规划)

    题目链接 Solution 很妙的DP,很妙的贪心. 首先考虑,如果说没有那个相同的不能配对的情况; 那么我们肯定是直接排两遍序,然后一一对应即可. 但是是有限制的,同时我们可得几个条件供贪心: 每个 ...

随机推荐

  1. zencart url特殊字符处理

    1. 支持 在后台的seo url 将Outputw3c 改为false 2.删除特殊字符 这对于在少量的zen cart网站上处理少量的特殊字符可能还适用,实际上我们经常在导入产品数据时或者或少会带 ...

  2. EL表达式,保留小数点后两位

    你遇到过页面显示小数有9.987870488E9这个吗? 这是因为没有保留小数的原因 有时候用js保留小数很麻烦的时候,可以用EL表达式 <fmt:formatNumber type=" ...

  3. 动态规划2-----hdu1069

    首先这道题目先要理解题目的意思. 用一些方块堆塔,给出的每种方块个数是无限的,只有满足长宽都小于下面一个方块的方块才能摆上去. 首先这道题需要一个转化. 每个方块有3个不同的面,每个面长宽交换,一共每 ...

  4. Apache2.4 137行 httpd-ahssl.conf

    C:\Users\Administrator>E:\PHP\Apache24\bin\httpd.exe -w -n "apache2.4" -k startAH00526: ...

  5. docker私有仓库搭建(ubuntu 14.04和centos7)

    最近是在做一个关于docker云化的项目,马上就要开始实战.下午先做了一个私有仓库搭建的实验,先大概做个笔记,有兴趣的蛮看一下吧. 先在所有机子上都安装上docker,我的是两台ubuntu,分别是1 ...

  6. VMware克隆CentOS虚拟机后固定IP的问题

    由于克隆虚拟机,VMware只是修改了虚拟机的名字等信息,并没有修改虚拟硬盘中的任何信息,导致克隆后网卡的MAC地址和操作系统中记录的mac地址不符,导致eth0启动不起来.操作系统记录了一个新网卡的 ...

  7. 在 Android 中调用二进制可执行程序(native executable )

    前几天有需要在java代码中调用二进制程序,就在网上找了些资料,写点东西记录下. Android 也是基于linux 的系统,当然也可以运行二进制的可执行文件.只不过Android 限制了直接的方式只 ...

  8. DWR 整合之Struts2.3.16

    DWR 能够和任何框架结合. DWR 和 Struts 整合有 2 个层次.最基础的层次就是同时使用这两个框架,这是非常容易的,但是这样就不允许在 DWR 和 Struts 之间共享 Action 了 ...

  9. AIDL原理解析

    首先为什么需要aidl? 下面是不需要aidl 的binder的IPC通讯过程,表面上结构很简单,但是有个困难就是,客户端和服务端进行通讯,你得先将你的通讯请求转换成序列化的数据,然后调用transa ...

  10. javascript 中的闭包

    在 javascript 中,函数可以当做参数传递,也可以当做返回值返回. 当一个函数内部返回值为一个函数时, 就形成了闭包.(闭包里面的 this 问题) 如下面代码 Function.protot ...