假如不存在相等的两个数不能配对,那很容易贪心得到,A中rank 1匹配B中rank 1

A中rank2 匹配B中rank 2……

有了相等不能匹配这个条件,那么A中rank i可能和rank i,i-1,i+1匹配

也有可能三对数字交换匹配

dp一下就好了

 const inf=;
type node=array[..] of longint;
var a,b:node;
    f:array[..] of int64;
    n,i:longint; function min(a,b:int64):int64;
  begin
    if a>b then exit(b) else exit(a);
  end; function calc(a,b:longint):longint;
  begin
    if a=b then exit(inf)
    else exit(abs(a-b));
  end; procedure qsort(var a:node);
  procedure sort(l,r:longint);
    var i,j,x,y: longint;
    begin
      i:=l;
      j:=r;
      x:=a[(l+r) div ];
      repeat
        while a[i]<x do inc(i);
        while x<a[j] do dec(j);
        if not(i>j) then
        begin
          y:=a[i];
          a[i]:=a[j];
          a[j]:=y;
          inc(i);
          j:=j-;
        end;
      until i>j;
      if l<j then sort(l,j);
      if i<r then sort(i,r);
    end;   begin
    sort(,n);
  end; begin
  readln(n);
  for i:= to n do
    readln(a[i],b[i]);
  qsort(a);
  qsort(b);
  f[]:=calc(a[],b[]);
  f[]:=min(f[]+calc(a[],b[]),calc(a[],b[])+calc(a[],b[]));
  for i:= to n do
  begin
    f[i]:=f[i-]+calc(a[i],b[i]);
    f[i]:=min(f[i],f[i-]+calc(a[i-],b[i])+calc(a[i],b[i-]));
    f[i]:=min(f[i],f[i-]+calc(a[i],b[i-])+calc(a[i-],b[i])+calc(a[i-],b[i-]));
    f[i]:=min(f[i],f[i-]+calc(a[i],b[i-])+calc(a[i-],b[i-])+calc(a[i-],b[i]));
  end;
  if f[n]=inf then writeln(-) else writeln(f[n]);
end.

bzoj1237的更多相关文章

  1. 【BZOJ1237】配对(贪心,DP)

    题意:有n个a[i]和b[i],调整顺序使abs(a[i]-b[i])之和最小,但a[i]<>b[i].保证所有 Ai各不相同,Bi也各不相同. 30%的数据满足:n <= 104 ...

  2. BZOJ1237: [SCOI2008]配对

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1237 题目大意:你有n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一 ...

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

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

随机推荐

  1. A题笔记(13)

    Evaluate Reverse Polish Notation Reverse Words in a String 类似的,需要将原序列后序排列的时候,都可以用 栈 来实现 stack<int ...

  2. webapp构建工具库

    Meteor:JavaScript App Platform braintree:在线支付 jquery datetimepicker:日期控件 Hotjar Tracking Code:网站追踪 Z ...

  3. IOS开发中针对UIImageView的几种常用手势

    // //  ViewController.m //  05-手势 // //  Created by wanghy on 15/9/21. //  Copyright (c) 2015年 wangh ...

  4. == 和 equals()的区别

    package com.liaojianya.chapter1; /** * This program demonstrates the difference between == and equal ...

  5. Java的云打印Lodop

        打印某一个网页上的内容我们都经常遇到过,比如网上申请港澳通行证时需要填写申请表,然后把申请表给打印出来.像这样的打印技术是怎么实现?这种打印可以通过一种叫云打印的插件来做,按我的理解云打印的技 ...

  6. python中的gil是什么?

    1.gil是什么? 在Python源代码:Python-2.7.10/Python/ceval.c.我看到的Python源代码版本为2.7.10 static PyThread_type_lock i ...

  7. ellang 中进程异步通信中的信箱与保序

    erlang 进程通讯中 执行到 receive 语句时 如果信箱没有消息可以匹配时会暂停等待消息. go() -> register(echo, spawn(test_pid,loop,[]) ...

  8. PHP问题

    /usr/bin/ld: cannot find -lltdlcollect2: ld returned 1 exit statusmake: *** [libphp5.la] 错误 1 缺少libt ...

  9. 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  10. php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event

    php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event