T4
因为握手与输入时的下标没有任何关系。
所以可以将每一对朋友按照\(A\)排序。
那么可以看到,如果两对朋友\((i,j)\)握手没有冲突,那么就满足\(A_i < A_j; B_i < B_j\)或者\(A_i > A_j; B_i > B_j\)
而我们已经排好了序,所以如果\(i < j\),当且仅当\(A_i \neq A_j 且 B_i < B_j\),握手才没有冲突。
如果保证\(A\)中任意两个元素互不相同,如果我们选出的若干对朋友的(已经排好序的)下标分别为$x_1,x_2,...,x_k (x_1 < x_2 < ... < x_k) $ 当且仅当\(B_{x_1}<B_{x_2} <...<B_{x_k}\)
那么此时已经可以从中发现其实这就是一个最长上升子序列。
但是题目没保证\(A\)中任意两个元素互不相同,但是如果有多组朋友的\(A\)相同,只能选一组。
在多组朋友的\(A\)相同时,如何排序才能保证最长上升子序列在这若干个\(B_j\)中最多选一个呢?
只要在对每对朋友按照\(A\)排序,当\(A\)相同时,按\(B\)降序排序即可。
这样如果多组朋友的\(A\)相同,也不存在问题了。因为最长上升子序列不可能同时经过前大后小的两个数字。
代码
\\请自行尝试实现,代码暂不开放

浙公网安备 33010602011771号