集训队作业poi9815解题报告.pdfVIP

  • 0
  • 0
  • 约2.91千字
  • 约 2页
  • 2024-08-10 发布于北京
  • 举报

《平坦的虚线》解题报告

转换问题条件:

本题看似无从下手,但是可以发现一个特殊的情况:折线与x轴夹角的范围

是[-45°,45°],范围大小正好相当于[0,90°],这启发夹角的范围转

换成[0,90°],这样可以使问题更直观。

将坐标轴沿逆时针方向旋转45°,这样问题的其它条件不变,只是虚线与x

轴夹角的范围变成[0,90°]。这样虚线中每一个点与上一个点连线与x轴的夹

角范围必须是[0,90°],换一种说法就是虚线中每个点只能一个的右上方。

具体说就是每个点的横纵坐标必须都小于或等于虚线中前一个的横纵坐标。

对应原有问题:

以前曾经有过一道类似的问题:《》。对于这道问题,如果采用每次

找出一个最长不下降子序列的贪心算法,不一定能得到最优解。一个简单的反例

就是:的高度分别是(按先后顺序)2,2,3,1,2,4,按以上的贪心做法

得到的结果是三次,2-2-2-4,3,1,然而实际上的最优方法应该是两次

,2-2-3,1-2-4。

方法1、这样的贪心算法虽然是错的,但我们不能就此排除采用贪心算法,因为

还可能有正确的贪心策略。我们考虑如下的一种贪心策略:记录下当前每一架高

射的高度,对于当前的,如果没有一架可以,则增加一架;

否则,选择能到它的高射中当前高度最大的一架,同时更新记录。例

如对于以上的例子,算法的工作情况如下:

当前每架高射的高度当前的高度方案

2增加一架高射

22选择当前高度为2的高射

23选择当前高度为2的高射

31增加一架高射

1,32选择当前高度为1的高射

2,34选择当前高度为3的高射

这样一共使用了两架高射。使用这个算法,我们可以解决《》问

题。

现在,我们回到原有的问题,可以发现这道题也可以采用上面说的第二种贪

心算法解决。现将所有点按横坐标大小排序,横坐标相同的点按纵坐标大小排序。一

开始高度集合H为空,以后对于每个点,若H中没有一个数小于这个点的y坐

标,则将y坐标加入到H集合中,虚线数加1;否则在H中寻找小于y坐标值且

最接近y坐标值的数,用当前点的y坐标值替换H中选取得数。

数据结构:

如果用线性表实现集合H,算法的时间复杂度是O(N^2),由于题目中n的范

围很大,显然题目的条件。由于这道题的查询工作有一定的特殊性:要

在集合中寻找小于且最接近于一个数的数,因此一些高效的数据结构如堆等都不

能满足要求,所以我们只能采用一种比较灵活的高效数据结构:树状数组。实现

的时候可以采用二叉排序树,这样算法的空间复杂度是O(N),时间复杂度是

O(NlogN)。

方法2、

方法1虽然可以解决问题,但是否还有更简单的方法呢?

定理:一个序列中最长上升子序列的长度等于不降子序列的最小

文档评论(0)

1亿VIP精品文档

相关文档