我刚开始,我打眼一看:哇!网络流大水题,直接费用流板子,建边跟zz一样。结果看了一眼数据范围。。。gg,luogu上只能得30,直接建边就是n^2,1e5根本过不了。咋办,只能另谋出路。想不出来,看题解之后恍然大悟!!!woc,还有这样一句话:

保证所有 Ai各不相同,Bi也各不相同。

惊了,但是还是不会,然后就有这样一个显而易见的东西:a[i]只能和b[i - 1],b[i],b[i + 1]匹配,否则一定不是最优解。。。然后和dp一样的思路,每个状态由4个枚举转移过来,然后就好了。

然后20???分怎么还少了???然后尝试开longlong,30。。。后来发现中间有一个地方落了一个int,然后又加了一个无解的特判,60。。。这就很迷,最后,我突然发现我初始给附的初始值memset(f,127,sizeof(f))好像比1LL<<60小不少,然后改完才AC。。。

这个题犯了我近期所有犯过的错误。。。还是要仔细一点啊。

题干

Description

你有n 个整数Ai和n 个整数Bi。你需要把它们配对,即每个Ai恰好对应一 个Bp[i]。要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配 对。例如A={,,},B={,,},则最优配对方案是5配8, 6配5, 8配7,配对整数 的差的绝对值分别为2, , ,和为5。注意,5配5,6配7,8配8是不允许的,因 为相同的数不许配对。
Input 第一行为一个正整数n,接下来是n 行,每行两个整数Ai和Bi,保证所有 Ai各不相同,Bi也各不相同。
Output 输出一个整数,即配对整数的差的绝对值之和的最小值。如果无法配对,输 出-。
Sample Input Sample Output HINT <= n <= ^,Ai和Bi均为1到10^6之间的整数。

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define lv(i,a,n) for(int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const long long INF = 1LL << ;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{
char c;
bool op = ;
while(c = getchar(), c < '' || c > '')
if(c == '-') op = ;
x = c - '';
while(c = getchar(), c >= '' && c <= '')
x = x * + c - '';
if(op) x = -x;
}
template <class T>
void write(T x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar('' + x % );
}
ll f[];
int n;
ll a[],b[];
ll judge(int x,int y)
{
if(a[x] == b[y])
return INF;
else
return abs(a[x] - b[y]);
}
int main()
{
read(n);
duke(i,,n)
{
f[i] = INF;
}
duke(i,,n)
{
read(a[i]);
read(b[i]);
}
if(n == && a[] == b[])
{
printf("-1\n");
return ;
}
sort(a + ,a + n + );
sort(b + ,b + n + );
f[] = judge(,);
f[] = min(judge(,) + judge(,),judge(,) + judge(,));
duke(i,,n)
{
f[i] = min(f[i],f[i - ] + judge(i,i));
f[i] = min(f[i],f[i - ] + judge(i,i - ) + judge(i - ,i));
f[i] = min(f[i],f[i - ] + judge(i,i - ) + judge(i - ,i - ) + judge(i - ,i));
f[i] = min(f[i],f[i - ] + judge(i,i - ) + judge(i - ,i - ) + judge(i - ,i));
f[i] = min(f[i],f[i - ] + judge(i,i - ) + judge(i - ,i) + judge(i - ,i - ));
}
write(f[n]);
return ;
}

B1237 [SCOI2008]配对 贪心 + dp的更多相关文章

  1. bzoj 1237 [SCOI2008]配对 贪心+dp

    思路:dp[ i ] 表示 排序后前 i 个元素匹配的最小值, 我们可以发现每个点和它匹配的点的距离不会超过2,这样就能转移啦. #include<bits/stdc++.h> #defi ...

  2. [SCOI2008]配对 (贪心,动态规划)

    题目链接 Solution 很妙的DP,很妙的贪心. 首先考虑,如果说没有那个相同的不能配对的情况; 那么我们肯定是直接排两遍序,然后一一对应即可. 但是是有限制的,同时我们可得几个条件供贪心: 每个 ...

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

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

  4. 洛谷 P2507 [SCOI2008]配对

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

  5. 【BZOJ-3174】拯救小矮人 贪心 + DP

    3174: [Tjoi2013]拯救小矮人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 686  Solved: 357[Submit][Status ...

  6. BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP

    BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...

  7. 洛谷P4823 拯救小矮人 [TJOI2013] 贪心+dp

    正解:贪心+dp 解题报告: 传送门! 我以前好像碰到过这题的说,,,有可能是做过类似的题qwq? 首先考虑这种显然是dp?就f[i][j]:决策到了地i个人,跑了j个的最大高度,不断更新j的上限就得 ...

  8. 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp

    题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...

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

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

随机推荐

  1. android AIDL示例代码(mark下)

    1.demo结构图 2.ipcclient Book类. package com.mu.guoxw.ipcclient; import android.os.Parcel; import androi ...

  2. C#的WebBrowser操作frame

    刚学c#不久,也不太懂什么IHTMLDocument.IHTMLDocument2.IWebBrowser2等等.自己琢磨了好久,终于知道了怎么用WebBrowser操作frame和iframe. 1 ...

  3. 【JSP】简单登陆界面

    学生登陆查询系统 1 程序的主要功能及特点 实现一个登录界面的基本功能,具体要求: 登录界面login.jsp含有表单,用户能够输入用户名和密码,并提交表单给verify.jsp. Verify.js ...

  4. 题解 P3258 【[JLOI2014]松鼠的新家】(From luoguBlog)

    唯一能得分的题也被自己搞炸了,好的. 考场上读完题基本认定和lca脱不了干系,想了一会确认是树剖. 那么问题来了,考前一节课刚发现自己之前打的树剖是错的. 而且就算是错的我也没信心考场调出来. 于是打 ...

  5. printf 打印较长字符

  6. 完全掌握vuex

    公司项目中大量的使用了vue,感觉对vue知识的掌握也越来越熟练了,录制视频教程也让我受益匪浅,自己成长的同时,我更希望帮助其他前端小伙伴一起成长.这篇文章我们主要讲解vuex. vuex是一个专门为 ...

  7. 09 Django组件之用户认证组件

    没有学习Django认证组件之前使用装饰器方法 from django.shortcuts import render, HttpResponse, redirect from app01.MyFor ...

  8. Django-xadmin+rule对象级权限的实现

    原文:https://blog.csdn.net/zcyuefan/article/details/77743380 1. 需求vs现状 1.1 需求要求做一个ERP后台辅助管理的程序,有以下几项基本 ...

  9. PAT 1088. Rational Arithmetic

    For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...

  10. 淘宝的开源分布式文件系统TFS

    TFS(Taobao FileSystem)是淘宝团队开源的海量非结构化数据存储设计的分布式系统.构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问.高可扩展.高可用.高性能.面向 ...