如果没有相同的数不能配的情况下,就直接排序后对位配就可以了,由单调性很好证明

然后如果有相同不能配的情况,那配对的数字在排完序的数列里一定不会跨度太大,因为离得越远意味着差值越大

然后就需要定量考虑到底要跨多少

只有相同的才会产生跨度,如果相同的有连续2个 就是交叉相连,如果3个,就有两种情况 ,如果4个,显然两个X更优

以后的就用X逼近,剩下3个就连成キ的两种情况就可以了

码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long n,i,j,f[99999][5],a[99999],b[99999];
int main()
{scanf("%lld",&n);for(i=1;i<=n;i++){scanf("%lld%lld",&a[i+2],&b[i+2]);     }sort(a+3,a+3+n);    sort(b+3,b+3+n);f[0][0]=f[1][0]=1000000000000000000;f[2][0]=0;
for(i=3;i<=n+2;i++)//0:全都配过了 1:最后一对没配 2: 最后两对没配
{f[i][0]=min(min(f[i-3][0]+abs(a[i]-b[i-1])+abs(a[i-1]-b[i-2])+abs(a[i-2]-b[i]),f[i-3][0]+abs(a[i]-b[i-2])+abs(a[i-1]-b[i])+abs(a[i-2]-b[i-1])),f[i-2][0]+abs(a[i]-b[i-1])+abs(b[i]-a[i-1]));  if(a[i]!=b[i]) {f[i][0]=min(f[i-1][0]+abs(a[i]-b[i]),f[i][0]);}
}
if(f[n+2][0]==1000000000000000000)printf("-1");
else    printf("%lld",f[n+2][0]);
}

bzoj1237 [SCOI2008]配对 贪心结论+插数dp相关推荐

  1. bzoj1860 [Zjoi2006]麻将 结论+插数dp

    这个题模型+手玩+特殊情况  可以比较简单的推出 首先考虑特殊情况 即这个单独的两个,这是可以枚举的 然后考虑模型,根据插数dp的思考方式,插入一个数会造成的影响只与相邻两个位置有关,所以就可以找到状 ...

  2. bzoj1037 [ZJOI2008]生日聚会Party 插数dp

    这个题首先要认清楚任意一个区间差不超过k个怎么理解 看到k一般想的是装压,但如果是状压的思路的话,就需要前k个满足某种条件,于是有可能会猜到前k个满足非全0或1,但这是显然错误的 由于仅仅考虑前k个并 ...

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

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

  4. bzoj 1237: [SCOI2008]配对(DP)

    1237: [SCOI2008]配对 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1602  Solved: 627 [Submit][Statu ...

  5. 洛谷P2507 [SCOI2008]配对

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

  6. 贪心算法--删数问题

    一个数178543,删除其中的K数,是这个数最小,例如k=4,结果为13. 推理当删除一个数时是这个数最小,那就是8, 当删除2个数时,是这个数最小就是7 当删除第k个数时,最小就是依次删除最大的数, ...

  7. AtCoder AGC032E Modulo Pairing (二分、贪心结论)

    题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_e 题解 猜结论好题. 结论是: 按\(a_i\)从小到大排序之后,一定存在一种最优解,使得以 ...

  8. 牛客 - 配对(贪心+数学)

    题目链接:点击查看 题目大意:给出两个由 n 个数字组成的数列 a 和 b ,现在题目要求我们让两个数列中建立映射,每对映射的贡献为两个数相加,即a[ i ] + b[ j ],现在求出第 k 大的数 ...

  9. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

最新文章

  1. Quartus和Modelsim中使用`include包含头文件的对比
  2. 指向函数的指针--转
  3. Redis Cluster高可用(HA)集群环境搭建详细步骤
  4. mysql win7 sp1 常见问题_win7旗舰版安装不了mysql问题-------win7系统版本选择问题的一点探索...
  5. 云顶之弈机器人法爆_云顶之弈:六法机器人强势来袭,输出爆炸,网友:吃鸡必备...
  6. 模拟器显示空白图片_网吧模拟器下载:小游戏礼包
  7. TensorFlow神经网络(二)反向传播
  8. input js 离开事件_JS购物车的实现
  9. Uber开源深度学习工具Ludwig学习实践
  10. MySQL递归查询 三种实现方式
  11. Ubuntu下bin文件的安装
  12. 产生(a,b)区间上均匀分布的随机数 C语言实现
  13. 使用调色板(Palette)API 获取颜色
  14. VMware下载与安装教程(详细)
  15. 关于五险一金,你想要的都在这里了
  16. WebStrom代码中出现浅黄色背景
  17. 柔性电子,常用材料总结
  18. 全差分运放中CMFB方面的学习
  19. Java 中多态的概念以及前提条件
  20. 扫盲贴 家用无线路由的安全设置

热门文章

  1. 合数分解质数c语言算法,合数分解成质数之和问题探究
  2. 设计模式笔记二十三:策略模式
  3. WORD如何缩小编号与文本之间的距离?
  4. Java VisualVM添加远程JMX连接时提示“无法使用service:jmx:rmi:///jndi/rmi******连接到*****”
  5. day15 java接口在开发中的作用
  6. Node概述_note
  7. 如何快速的入门git实现版本控制
  8. python 双层for循环_day05-Python运维开发基础(双层循环、pass/break/continue、for循环)...
  9. mysql infobright 缺点_infobright、mongodb优劣以及适用范围
  10. mysql如何选择多个表_从两个表mysql中选择多行