一、算法分析
所有DP类问题肯定都不是裸题放那里考,所以对DP类问题的解题关键也在于判断其能否用DP来做,以及如何将复杂问题分解为熟悉的类型(如线性DP、树上的DP等),比如这道题友好城市,A桥和B桥不相交的条件显然是两座桥的起点的相对位置和终点的相对位置是一致的,比如第一座桥起点在第二座桥起点的西边,那么第一座桥的终点也应该在第一座桥终点的西边。那么如何建最多的桥呢?这里就要把问题进行分解从而简化,我们可以将起点排序,这样从起点来看就不会发生冲突,那么冲突就只能发生在终点上,然后我们只要找终点的一个最长不下降子序列即可。
二、代码
using namespace std;
const int maxn=2e5+5;
struct line{
int bg;
int ed;
line(int b,int e):bg(