【bzoj1237】【scoi2008】【配对】【dp】
来源:互联网 发布:socket java 多客户端 编辑:程序博客网 时间:2024/05/17 07:40
Description
你有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是不允许的,因 为相同的数不许配对。
Input
第一行为一个正整数n,接下来是n 行,每行两个整数Ai和Bi,保证所有 Ai各不相同,Bi也各不相同。
Output
输出一个整数,即配对整数的差的绝对值之和的最小值。如果无法配对,输 出-1。
Sample Input
3
3 65
45 10
60 25
3 65
45 10
60 25
Sample Output
32
HINT
30%的数据满足:n <= 104 100%的数据满足:1 <= n <= 105,Ai和Bi均为1到106之间的整数。
题解:
首先对两个数组排序.
可以证明每个数和它配对的数位置只可能相差2.
设f[i]表示配对到第i个数,那只可能从f[i-1],f[i-2]转移过来.
然后直接dp即可.
代码:
#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#define N 100010 #define inf 21000000000000000llusing namespace std;int n,a[N],b[N]; long long f[N];long long cal(int x,int y){ if (x==y) return inf; else return abs(x-y);}int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); if (n==1&&a[1]==b[1]) return cout<<-1<<endl,0; sort(a+1,a+n+1); sort(b+1,b+n+1); f[1]=cal(a[1],b[1]); f[2]=min(f[1]+cal(a[2],b[2]),cal(a[1],b[2])+cal(a[2],b[1])); for (int i=3;i<=n;i++){ f[i]=f[i-1]+cal(a[i],b[i]); f[i]=min(f[i],f[i-2]+cal(a[i],b[i-1])+cal(a[i-1],b[i])); f[i]=min(f[i],f[i-3]+cal(a[i-2],b[i])+cal(a[i-1],b[i-1])+cal(a[i],b[i-2])); f[i]=min(f[i],f[i-3]+cal(a[i-2],b[i-1])+cal(a[i-1],b[i])+cal(a[i],b[i-2])); f[i]=min(f[i],f[i-3]+cal(a[i-2],b[i])+cal(a[i-1],b[i-2])+cal(a[i],b[i-1])); } return cout<<f[n]<<endl,0;}
0 0
- 【bzoj1237】【scoi2008】【配对】【dp】
- bzoj1237 wikioi2430 [SCOI2008]配对 dp
- [BZOJ1237][SCOI2008]配对(dp)
- BZOJ1237: [SCOI2008]配对
- bzoj1237 [SCOI2008]配对
- bzoj1237: [SCOI2008]配对
- BZOJ1237: [SCOI2008]配对
- bzoj1237 [SCOI2008]配对
- bzoj1237 [SCOI2008]配对 贪心结论+插数dp
- BZOJ1237 配对 [DP]
- 【bzoj 1237】[SCOI2008]配对 dp
- bzoj 1237: [SCOI2008]配对 (贪心+DP)
- bzoj 1237: [SCOI2008]配对(DP)
- [SCOI2008]配对
- BZOJ 1237: [SCOI2008]配对
- bzoj 1237 [SCOI2008]配对
- 洛谷 2507 SCOI2008 配对
- BZOJ 1237: [SCOI2008]配对 一个神奇的东西然后简单DP
- poj 3311 Hie with the Pie floyd+状态压缩dp
- mysqlbinlog 查看binlog时报错unknown variable 'default-character-set=utf8'
- SEO中的404页面及其配置
- JVM内存划分总结
- hdu 2181 哈密顿绕行世界问题 ——dfs
- 【bzoj1237】【scoi2008】【配对】【dp】
- delphi7如何安装oracle access控件
- 跋涉不止(44)
- 保险业巨头John Hancock启动区块链技术试验
- 河海大学常州校区第三届H-star程序设计大赛决赛
- 跋涉不止(45)
- 【012】【Java晚期(运行期)优化】
- ClassLoader机制分析与自制加解、密类加载器
- 印度储备银行行长批评央行,关注数字货币追赶中国