传送门: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. angula组件-通过键盘实现多选(原创)

    在刚刚结束的angular交易系统项目中有几个需求是让我感觉要花点时间的 如何更优雅的使用angular-bootstrap 的 Modal框. 通过键盘实现ctrl多选,shfit批量选的功能. 如 ...

  2. telnet关闭tomcat

    telnet localhost 8005然后输入SHUTDOWN即可关闭tomcat 前提是8005端口已打开

  3. PAT (Advanced Level) 1049. Counting Ones (30)

    数位DP.dp[i][j]表示i位,最高位为j的情况下总共有多少1. #include<iostream> #include<cstring> #include<cmat ...

  4. c# winform 点击按钮切换tabcontrol标签

    this.tabControl1.TabPages.Remove(tabPage1); this.tabControl1.TabPages.Remove(tabPage2); this.tabCont ...

  5. 项目整体说明及WBS练习

    乐谱识别研究的意义 纸质乐谱向数字化乐谱的转换,是人类音乐活动与计算机音乐处理之间进行信息交流的必经之路.光学乐谱识别是将纸质乐谱扫描输入计算机后,对乐谱图像加以处理.识别.分析,最终获得乐谱的计算机 ...

  6. Android Guts: Intro to Loopers and Handlers

    One of the reasons I love Android API is because it contains so many useful little things. Many of t ...

  7. JSP处理AJAX

    register.jsp: <script type="text/javascript"> var req; function validate() { var idF ...

  8. hibernate--coreapi--configuration sessionfactory--getcurrentsession--opensession

    sessionfactory的目的:产生session,维护数据库连接池 测试文件里的sessionfactory创建数据库连接,所以sessionFactory通过配置文件里的配置信息产生一个数据库 ...

  9. Cocos2dx 3.1.1 学习笔记整理(2):创建场景与载入图片

    把之前用2.2.3的代码迁移到3.1.1真是个蛋疼的工作,话说3.1.1做的改动还真是大啊. 可以在HelloWorldScene.cpp中看到,之前的各种CCXXX都被废弃了. 例如,新建一个CCL ...

  10. 微信小程序tips集合:无法输入文字/随时查看页面/元素审查/点击事件/数据绑定

    1:编辑文档无法输入文字 出现这种情况一般是因为之前编辑的文档未保存,所有在其他文档输入的时候会自动输入到未保存的文档中,在文档暂时编辑完毕后要ctrl+s随手保存,不然会出现无法打字情况 2: 随时 ...