博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1980
阅读量:7238 次
发布时间:2019-06-29

本文共 1497 字,大约阅读时间需要 4 分钟。

首先想到费用流,但m<=100000还是算了吧

那就感觉要用dp了,首先将a,b排序
贪心一下可知,a,b的配对肯定不可能出现交叉
这样就可以dp了,复杂度O(nm)还是过不去
在贪心一下会发现,对于a[i],它只可能在j的左右n的范围内匹配(b[j]是b序列中第一个大于a[i]的)
这样就O(n2)了

1 type list=array[0..1000010] of longint; 2 var f:array[0..1,0..1000010] of longint; 3     c,a,b:list; 4     ans,p,k,i,j,l,r,s,e,n,m:longint; 5  6 function min(a,b:longint):longint; 7   begin 8     if a>b then exit(b) else exit(a); 9   end;10 11 function max(a,b:longint):longint;12   begin13     if a>b then exit(a) else exit(b);14   end;15 16 procedure qsort(var a :list;m:longint);17   procedure sort(l,r: longint);18     var i,j,x,y: longint;19     begin20       i:=l;21       j:=r;22       x:=a[(l+r) div 2];23       repeat24         while a[i]
j) then27 begin28 y:=a[i];29 a[i]:=a[j];30 a[j]:=y;31 inc(i);32 j:=j-1;33 end;34 until i>j;35 if l
=b[p]) do inc(p);55 c[i]:=p;56 end;57 k:=0;58 for i:=1 to n do59 begin60 k:=1-k;61 l:=max(i-1,c[i-1]-n);62 r:=min(m,c[i-1]+n);63 s:=max(i,c[i]-n);64 e:=min(m,c[i]+n);65 if i=1 then r:=m-n+1;66 f[k,s-1]:=2147483647;67 p:=l;68 for j:=s to e do69 begin70 f[k,j]:=f[k,j-1];71 while (p
2147483647 then inc(f[k,j],abs(a[i]-b[j]));79 end;80 ans:=2147483647;81 for i:=s to e do82 ans:=min(ans,f[k,i]);83 writeln(ans);84 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473100.html

你可能感兴趣的文章
mysql函数替换域名
查看>>
HDU 1025--LIS算法
查看>>
docker容器访问宿主机IP
查看>>
python- - 函数 - - 迭代器和生成器
查看>>
WebService连接sql serever并使用Android端访问数据
查看>>
无service.bat的tomcat服务怎么设置自启动
查看>>
OpenCV——IplImage
查看>>
源码安装部署redis
查看>>
windows github 下载慢 修改hosts
查看>>
HTML布局规范
查看>>
关于java加法的编写
查看>>
第七周编程总结
查看>>
CocoaPods的安装使用和常见问题
查看>>
计算机科学,大一学生怎样来爱你(文&PPT)
查看>>
老男孩在创业及培训中28条教导学生感悟语录分享!
查看>>
老板不在,你不得不做出越权的决定,咋办?(考试题系列)
查看>>
如何解决SQL Server 2008 R2中“阻止保存要求重新创建表的更改”的问题!
查看>>
cloudstack 4管理器安装备忘
查看>>
sentry日志管理系统安装以及使用教程
查看>>
python-pip : Depends: python-setuptools (>= 0.6c1) 问题
查看>>