2017.8.14 总结

来源:互联网 发布:武延军 中科院软件所 编辑:程序博客网 时间:2024/06/05 08:46

今天早上的题么….还算简单….就是最后一题……要用到斜率优化DP..或者模拟退火…然而这两者我都不会(雾)…只好拿(pian)了15分走人qwq

T1

题意:给你1个村庄中的n个建筑,每个建筑都有一对坐标(x,y)。目前,n个建筑都没有网络(大雾)。现在有两种方法让这些村庄连上网:
(1):给中国移动交宽带费,从中国移动直接向该村庄连一条网络,花费为A
(2):向另外一幢有网的建筑,安装共享网线,花费为B×两幢建筑的曼哈顿距离。
现在,问你要将所有建筑都连上网所需要花费的最少的钱(n1000)

画外音:这题其实是个送分题(逃)。

思路&&题解:这题一看就知道(23333),因为数据范围非常小,所以我们可以直接用MST来做。首先,将中国移动设为n+1号点,向1nn个点都连出一条长度为A的边。之后两重for循环求出建筑i,j间的曼哈顿距离为disi,j。若Bdisi,j<A,则在建筑i,j间加入一条Bdisi,j的边,最后只要跑一下最小生成树就行啦!

T2

简化版题意:给你一条长度为n,左端点为1的线段,上面有n个点,第i个点有一个值a[i],表示由该点延伸出的线段可以覆盖max(0,ia[i])min(n,i+a[i])的地方,求最少用多少条线段可以覆盖原来1n的线段。(n500000,a[i]n)

画外音:这题…有两种做法(逃)。

思路&&题意:这题可以用贪心or线段树的方法去写,我写的方法是贪心。(至于线段树,怎么写就自己想吧qwq)。
贪心解法:将n个点所给出的a[i]都化成n条线段,之后将它们按左端点排序。设now为现在可以覆盖到的最右边的端点(初始值为0),之后只用遍历一次,每次只用左端点小于等于now+1的线段选出一条右端点离now最远的线段,将now更新就行了,重复做直到now=n,最后,while的次数便是我们要的答案。(P.S. 每次while的时候只用从上次遍历的最后一条线段开始遍历就行了,不用从头开始)。

T3

题意:农夫约(FarmerJo)有许多奶牛,并且有(n+1)幢建筑,所有奶牛都被放在这(n+1)幢建筑里,农夫约要做一些防火措施,保障自己和奶牛的安全。这(n+1)幢建筑排成了一排,编号为0n,对于0i<n,建筑iw[i]头奶牛居住,与建筑(i+1)距离d[i]。建筑n已装有消防栓,现在农夫约决定再给k幢建筑安装消防栓,以减少安全隐患。
当火灾来临时,所有奶牛都会从所在建筑开始,向大编号方向逃生,直到碰上第一个消防栓为止(如果本来这幢建筑就安装有消防栓,那就不用跑了)。农夫约定了一个隐患值val:所有奶牛逃生距离之和。
农夫约希望隐患值尽可能小,需要你给他设计一种方案。
5%的数据k=0
10%的数据k=1
55%的数据k=2
20%的数据k=3
5%的数据k=5
5%的数据k=20
100%的数据n1000000

思路:这题….我刚看到是懵逼的,后来发现这跟CEOI2004那道锯木厂选址很像,就是增加的东西由2改为020。但是我还是不会做啊TAT…锯木厂选址用的是斜率优化DP啊QAQ…最后只好拿了个k=0k=1的数据点…

题解:出题人讲题时说这题用的是随机化算法——模拟退火来写的,但没想到O(nk)的斜率优化DP也能过,于是这题就有了两种解法,一种是斜率优化DP,一种是模拟退火。(具体怎么做自己想吧..我也还没弄懂QAQ)

=========我是萌萌的分割线QWQ=========

下午..讲了所有网络流的东西,从基础定义到上下界网络流什么的..我从刚开始还听得懂,到后来,越来越懵逼..最终..好像掉线了一段时间(雾),不过重连了(大雾)。(虽然重连了但还是听不懂啊喂qwq)。看来我还得好好学习下各种各样的网络流了。Fighting!!!
这里写图片描述