bzoj1237 [SCOI2008]配对 贪心结论+插数dp
如果没有相同的数不能配的情况下,就直接排序后对位配就可以了,由单调性很好证明
然后如果有相同不能配的情况,那配对的数字在排完序的数列里一定不会跨度太大,因为离得越远意味着差值越大
然后就需要定量考虑到底要跨多少
只有相同的才会产生跨度,如果相同的有连续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相关推荐
- bzoj1860 [Zjoi2006]麻将 结论+插数dp
这个题模型+手玩+特殊情况 可以比较简单的推出 首先考虑特殊情况 即这个单独的两个,这是可以枚举的 然后考虑模型,根据插数dp的思考方式,插入一个数会造成的影响只与相邻两个位置有关,所以就可以找到状 ...
- bzoj1037 [ZJOI2008]生日聚会Party 插数dp
这个题首先要认清楚任意一个区间差不超过k个怎么理解 看到k一般想的是装压,但如果是状压的思路的话,就需要前k个满足某种条件,于是有可能会猜到前k个满足非全0或1,但这是显然错误的 由于仅仅考虑前k个并 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- bzoj 1237: [SCOI2008]配对(DP)
1237: [SCOI2008]配对 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1602 Solved: 627 [Submit][Statu ...
- 洛谷P2507 [SCOI2008]配对
P2507 [SCOI2008]配对 题目背景 四川NOI2008省选 题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值 ...
- 贪心算法--删数问题
一个数178543,删除其中的K数,是这个数最小,例如k=4,结果为13. 推理当删除一个数时是这个数最小,那就是8, 当删除2个数时,是这个数最小就是7 当删除第k个数时,最小就是依次删除最大的数, ...
- AtCoder AGC032E Modulo Pairing (二分、贪心结论)
题目链接 https://atcoder.jp/contests/agc032/tasks/agc032_e 题解 猜结论好题. 结论是: 按\(a_i\)从小到大排序之后,一定存在一种最优解,使得以 ...
- 牛客 - 配对(贪心+数学)
题目链接:点击查看 题目大意:给出两个由 n 个数字组成的数列 a 和 b ,现在题目要求我们让两个数列中建立映射,每对映射的贡献为两个数相加,即a[ i ] + b[ j ],现在求出第 k 大的数 ...
- [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)
problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...
最新文章
- Quartus和Modelsim中使用`include包含头文件的对比
- 指向函数的指针--转
- Redis Cluster高可用(HA)集群环境搭建详细步骤
- mysql win7 sp1 常见问题_win7旗舰版安装不了mysql问题-------win7系统版本选择问题的一点探索...
- 云顶之弈机器人法爆_云顶之弈:六法机器人强势来袭,输出爆炸,网友:吃鸡必备...
- 模拟器显示空白图片_网吧模拟器下载:小游戏礼包
- TensorFlow神经网络(二)反向传播
- input js 离开事件_JS购物车的实现
- Uber开源深度学习工具Ludwig学习实践
- MySQL递归查询 三种实现方式
- Ubuntu下bin文件的安装
- 产生(a,b)区间上均匀分布的随机数 C语言实现
- 使用调色板(Palette)API 获取颜色
- VMware下载与安装教程(详细)
- 关于五险一金,你想要的都在这里了
- WebStrom代码中出现浅黄色背景
- 柔性电子,常用材料总结
- 全差分运放中CMFB方面的学习
- Java 中多态的概念以及前提条件
- 扫盲贴 家用无线路由的安全设置
热门文章
- 合数分解质数c语言算法,合数分解成质数之和问题探究
- 设计模式笔记二十三:策略模式
- WORD如何缩小编号与文本之间的距离?
- Java VisualVM添加远程JMX连接时提示“无法使用service:jmx:rmi:///jndi/rmi******连接到*****”
- day15 java接口在开发中的作用
- Node概述_note
- 如何快速的入门git实现版本控制
- python 双层for循环_day05-Python运维开发基础(双层循环、pass/break/continue、for循环)...
- mysql infobright 缺点_infobright、mongodb优劣以及适用范围
- mysql如何选择多个表_从两个表mysql中选择多行