这明明是一道很水很经典的入门DP。
然后我炸了。
题目就是在一条路两边有很多点 每个点都有在路的另一边与之对应的“朋友点”
然后连接所有点与“朋友点” 问最多有多少条不相交的线
第一下想到的是定义一个结构体 两两放一起然后排序 dp方程很好写
f[i]=max(f[i],f[j]+1)
在没有写dp方程之前我傻傻地根据样例想着排序, a.north<b.south 这样就可以很好地分成两个序列了。
4 5
2 4
5 2
1 3
3 1
4 5
2 4
5 2
1 3
3 1
这样排出来的话 就是
1 3
2 4
4 5
3 1
5 2 然后求一下south的最长上升子序列就好
2 4
4 5
3 1
5 2 然后求一下south的最长上升子序列就好
然而 这只是样例 因为我们写的mycmp没有规定a.north与b.north的关系,所以出排序得到的值不会像样例的这样听话
然后当时就试着改成pair (猛地拍脑袋 我怕不是傻了)
最后终于是弄出来了,。,,
#include<bits/stdc++.h>
using namespace std;
int x,y,n;
struct cities{
int north,south;
}city[6000]={}
using namespace std;
int x,y,n;
struct cities{
int north,south;
}city[6000]={}