题目大意: 给出一些大象,包含它的重量、智商。要你找出最长的序列,满足重量越大、智商越低。(严格增减)

题目类型:dp / LIS

题目分析:

把大象按重量升序排序,然后在此序列中对智商属性找最长单减子序列。要注意的是,题目要求的都是严格增减,所以要在判断条件里考虑相等的情况以排除(主要是重量)。

另外还要注意,排序后,序就不是原来的序了,而题目要求输出原序。所以在排序时维护一个r[]数组。

对于 最长单减子序列 的dp,状态转移方程(2种):

//d[i] = max{d[j]+1 | s[i]>s[j]; j = (i, n);} //d[i] 表示以 i 开头的 最长 递减子序列
//d[i] = max{d[j]+1 | s[i]<s[j]; j = [0, i);} //d[i] 表示以 i 结尾的 最长 递减子序列

代码: