bzoj 1237 [SCOI2008]配对
来源:互联网 发布:笑郭网络验证4.0 编辑:程序博客网 时间:2024/05/21 08:44
1237: [SCOI2008]配对
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1450 Solved: 553
[Submit][Status][Discuss]
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
Sample Output
32
HINT
30%的数据满足:n <= 104 100%的数据满足:1 <= n <= 105,Ai和Bi均为1到106之间的整数。
Source
【分析】
大力观察发现,排序之后a和b匹配的最远距离不会超过2位,否则肯定不是最优解,这样就可以直接DP过去了…
【代码】
//bzoj 1237 [SCOI2008]配对#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int mxn=100005;const ll inf=1e18;int n,a[mxn],b[mxn];ll dp[mxn];inline int read(){ int x=0,f=1;char ch=getchar(); while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}inline ll c(int x){ return x==0?inf:abs(x);}int main(){ int i,j; n=read(); fo(i,1,n) a[i]=read(),b[i]=read(); sort(a+1,a+n+1); sort(b+1,b+n+1); dp[1]=c(a[1]-b[1]); dp[2]=min(dp[1]+c(a[2]-b[2]),c(a[1]-b[2])+c(a[2]-b[1])); fo(i,3,n) { dp[i]=min(dp[i-1]+c(a[i]-b[i]),dp[i-2]+c(a[i]-b[i-1])+c(a[i-1]-b[i])); dp[i]=min(dp[i],dp[i-3]+c(a[i]-b[i-1])+c(a[i-1]-b[i-2])+c(a[i-2]-b[i])); dp[i]=min(dp[i],dp[i-3]+c(a[i]-b[i-2])+c(a[i-1]-b[i])+c(a[i-2]-b[i-1])); } printf("%lld\n",dp[n]>=inf?-1:dp[n]); return 0;}
阅读全文
0 0
- BZOJ 1237: [SCOI2008]配对
- bzoj 1237 [SCOI2008]配对
- 【bzoj 1237】[SCOI2008]配对 dp
- bzoj 1237: [SCOI2008]配对 (贪心+DP)
- bzoj 1237: [SCOI2008]配对(DP)
- [SCOI2008]配对
- BZOJ 1237: [SCOI2008]配对 一个神奇的东西然后简单DP
- 【bzoj1237】【scoi2008】【配对】【dp】
- BZOJ1237: [SCOI2008]配对
- bzoj1237 [SCOI2008]配对
- bzoj1237: [SCOI2008]配对
- BZOJ1237: [SCOI2008]配对
- bzoj1237 [SCOI2008]配对
- 洛谷 2507 SCOI2008 配对
- BZOJ 1237 配对
- bzoj1237 wikioi2430 [SCOI2008]配对 dp
- Vijos P1530 配对(SCOI2008)题解
- [BZOJ1237][SCOI2008]配对(dp)
- C++const限定符
- ZCMU—1927
- CriticalSection_2
- 《疯狂 Java 突破程序员基本功的 16 课》读书笔记
- 由浅入深JavaScript2基础-变量和原始类型
- bzoj 1237 [SCOI2008]配对
- POJ1163The Triangle(动态规划记忆化搜索入门精讲)
- 合并有序数组
- 一步一计算(单向链表)
- CriticalSection
- Python之路,Day1
- 关于互联网笔试题
- 直线上最多的点的个数
- 网络配置和软件安装