2014.08.13总结

本文探讨了四个编程问题,其中三个可以通过暴力算法解决。第一题涉及选择MST来最小化边的极差;第二题要求在无根树中找到度数之和最大的链,使用两次SPFA解决;第三题是关于NOI2005原题的简化版,采用动态规划或暴力方法均可。最后一个问题涉及到NP问题,作者未能理解题解并选择放弃。博客强调了暴力搜索的重要性及优化策略。

“暴力万岁!” 又被虐了一天之后,我只能无奈地发出呼喊。

今天的题目呢,嗯,简单地说,像是暴力专场。毕竟暴力也是一门艺术!

共4题,有2人300+,我只有140。先上题,慢慢分析。


T1 :Span

题目大意:给出N个点,M条边。在M条边中选取N - 1条边使图联通,并且最长边和最短边的差最小【总代价不要求最小】 PS.多组数据,最多6组。

范围:  

       1:2 ≤ n ≤ 100 and 0 ≤ m ≤ n(n − 1)/2
  2:每条边的权值小于等于10000
  3:保证没有自环,没有重边


一眼看上去,MST。仔细一看,不要求总代价最小,要极差最小,嗯,做M遍MST,枚举最短的边是什么,M^2暴力。

仔细算算时间复杂度,就算N只有100,M也能达到5000左右,总时间(理论上)为 M * M * 6 + M log M = 1.5亿

怎么看都过不了,而且数据完全没有分段,还以为很难,没有想象中那么简单。

于是博主就花时间在优化上。。。无从下手,只能暴力。

然后,这就是”正解“。    因为实际上根本达不到M*M。。。是这么解释的,最理想是M*N(只有N条边啊)


T2:无聊的草稿

题目大意:给出一颗无根树,在树上找一条链,使链上的每一个点的度数之和最大。

数据范围:  

       1. 对于20%的数据,N≤200
  2. 对于40%的数据,N≤5000
  3. 对于100%的数据,N≤10^6

理解出题目大意之后就明白了,这是要我们求带点权的最长链,关键是,我忘了怎么快速地求最长链。。。。

博主摸索了许久没有头绪之后,只能N^2暴力地做N次SPFA找最长链了。

实际上最长链的题目我们遇到过几次,像POJ 1985 树的直径,现在想起来还记得我当时惊讶的神情QAQ

树的最长链其实只需要两次SPFA,先任意选择一个节点做SPFA(最好用叶节点啦),找出距离最远的点NUM。

再从NUM出发做一次SPFA,找出距离最远的NUM2,NUM --> NUM2就是一条最长链。(最长链可能有多条,但长度一定一样)

证:

第一次找出的NUM必定是深度最深的点(之一),若存在另一条最长链,它的终点 E 必然不是深度最深的点。

对于这样一条链,必然有某一个祖先X可以引到NUM

对于起点S -- > X这一段是两个链公用的,len(X -->NUM) > len(X --> E) ,因为NUM更深。

即S --> E不是最长链。

即:不存在比S --> NUM更长的链。得证:S --> NUM为最长链。

【不理解的同学可以去查更高级的证明方法。】


这样一来,对于所有求树的直径【最长链】的题都可以2遍SPFA解决啦。

这一题也是一个比较明显的树形DP,博主没有去写因为过于繁杂,有兴趣的同学可以推一下。


T3:锻炼身体

题目大意:NOI2005 瑰丽华尔兹 原题

数据范围:
  对于60%的数据 N,M<=80 K<=50
  对于100%的数据 N,M<=200,K<=200,T <= 10000

【比NOI2005原题的数据水】


读完题目,分析数据范围,嗯,暴力(N^3就能过),没有更简单的方法了。

由于它可以走走停停,难道要2^K枚举?

不对不对,一定是DP,怎么DP?

一步一步地模拟?不对不对,太慢(慢?)了。

那就暴力吧,可是2^K怎么暴力啊?

DP?暴力?DP?暴力?

博主就这么纠结着思考了45MIN居然无果,无从下手,直接跳过,殊不知,这题,最水。

首先,DP and 暴力都是可以的。因为这个DP本质上就是暴力。

设F[I,X,Y]为第I个时间段,人物在(X,Y)的最大移动距离。

转移时,枚举第I个时间段走了多少步(step = 0 ~ T[I]),得出移动后位置(tx, ty),  

F[I + 1 , tx ,ty] = max(F[I + 1,tx , ty] , F[I , x, y ] + step)

答案就是F[K + 1]的最大值,时间复杂度N*M*K*STEP。连数据强化的NOI 2005的那题 都能过。因为K*STEP不会太大。


T4 : Train

题目大意:各站分别编号为1到N,按照列车通过的顺序递增排列。在列车到站时,可以挂上或卸下一些车厢。当然挂上的车厢只能挂在车头或车尾,同样也只有车头或车尾的车厢可以卸下来。现在有M节车厢,每节车厢都有一个起点和终点,你要安排出一个控制过程,是的每个车厢能在它的起点处挂上车厢,在它的终点处卸下车厢。


题目我就不解释了,怎么看都是NP问题,由于此题题解完全看不懂,某大牛也表示不明白,博主表示放弃,强扭的瓜不甜,等哪天我能懂了再回来写吧。


今天的题目总的来说还是相对简单的,都是暴力可以解决的问题。暴力搜索薄弱的我就有些忧伤,多打,多练。博主本来也打出了第二题,第三题,由于暴力搜索的程序出现了很多BUG调试不过来,改题的时候每题都用了将近1h,我还得继续打程序。

今天就这么结束了,冰冻三尺非一日之寒,我还得继续积累。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值