1.说了很多,但是一句话可以概括在平行线的之间有一些线段,取一组线段使得任意两条不相交求最多有多少条这样的线段。
2.分析:为什么就是转化成了LIS了呢其实這个很简单,我们只需要考虑一条边从1到n,然后把另一条边上的数字映射上来并且是一一对应的,所以就是个数组了a[i]=j;代表i和j之间有┅条线段,做完这个映射之后我们可以观察到,如果在poor cities中i<j的,那么如果二者不相交就a[i]就必然是小于a[j]的。就是一种偏序关系知道了這个,求最多满足的那么就是求LIS了但是如果只是普通的n2的做法,必然是不行的这里我们采用二分将复杂度下降为nlogn即可。下面是代码:
//找长度为n的最长的上升子序列