BZOJ 1237: [SCOI2008]配对

来源:互联网 发布:mac迅雷怎么看片 编辑:程序博客网 时间:2024/05/16 09:18

智障地度过了一个清明节 辣鸡效率。。
来写个blog。。

谢谢某位dalao的指点 问他问题的时候惨遭断句 我:问你个 智障 问题
dalao:对象是“你个智障”?
我:不不不 我要问您个问题 那是个智障问题 含义是“我是智障”

这道题很多人说不难发现 在排序之后 只会配对相邻前后的2个位置 这是为什么呢
就让本蒟蒻来证一下
首先 可以画个图
你可以自己标一下值什么的 如果有交叉 那么我们交换一下他们 那么交换后的价值是肯定<=之前的代价 可以理解为优于之前的

那么如果有配对到前后3个位置的 (随便画一个)这里写图片描述
肯定有3条交叉的线 那肯定是可以交换的 所以就不会有3个的情况 就变成至少两个了

那为什么会有两个的情况 因为题目有相等的限制啊这里写图片描述
如果f=c,a=d那就两种调整不能实现 不能变成1个的情况

嗯。。讲完了

#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=100010,inf=1e9+7;inline int read(){    char ch=getchar(); int x=0,f=1;    while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}    return x*f;}int a[N],b[N]; LL f[N];LL c(LL x,LL y){return x==y?inf:abs(x-y);}int main(){    int n=read(),i;    for(i=1;i<=n;i++)a[i]=read(),b[i]=read();    if(n==1 && a[1]==b[1]){printf("-1\n"); return 0;}    sort(a+1,a+1+n),sort(b+1,b+1+n);    f[1]=c(a[1],b[1]),f[2]=min(f[1]+c(a[2],b[2]),c(a[1],b[2])+c(a[2],b[1]));    for(i=3;i<=n;i++)    {        f[i]=f[i-1]+c(a[i],b[i]);        f[i]=min(f[i],f[i-2]+c(a[i],b[i-1])+c(a[i-1],b[i]));        LL u=min(c(a[i-2],b[i])+c(a[i-1],b[i-1])+c(a[i],b[i-2]),                c(a[i-2],b[i-1])+c(a[i-1],b[i])+c(a[i],b[i-2]));        u=min(u,c(a[i-2],b[i])+c(a[i-1],b[i-2])+c(a[i],b[i-1]));        f[i]=min(f[i],f[i-3]+u);    }    printf("%lld\n",f[n]);    return 0;}
2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 集团v网取消不了怎么办 退订了集团v网怎么办 苹果id两个串号怎么办 无线固话的号码怎么办 手机电话键没了怎么办 翼支付密码忘了怎么办 滴滴驾龄不够3年怎么办 百度云下的太慢怎么办 百度云下的好慢怎么办 网盘下载速度慢怎么办 4g移动卡网速慢怎么办 天翼校园开wifi怎么办 校园卡不给销户怎么办 吃腻了难受恶心怎么办 深夜吃撑了难受怎么办 吃撑了肚子难受怎么办 喝水喝撑了难受怎么办 晚饭吃撑了难受怎么办 吃多了肚子难受怎么办 电信4g信号变3g怎么办 五险交了3月离职怎么办 怎么办工行携程灵通卡 易买得消费卡怎么办 贷款回执单丢了怎么办 医院挂号过号了怎么办 脑子里总是胡思乱想睡不着怎么办 被妹夫给睡了怎么办 被妹夫抱了下怎么办 最里面牙齿烂了怎么办 老公有外遇不承认怎么办 对老公疑心太重怎么办 当你发现老公出轨怎么办 发现自己老婆出轨了怎么办 笔袋密码忘记了怎么办 海关锁密码忘了怎么办 800度近视献了血怎么办 当老公有了外遇妻子该怎么办 妻子有外遇我该怎么办 喜欢拔粗的头发怎么办 小腿长水泡很痒怎么办 脚丫有水泡又痒怎么办