# (DP LIS) leetcode 646. Maximum Length of Pair Chain

You are given n pairs of numbers. In every pair, the first number is always smaller than the second number.

Now, we define a pair (c, d) can follow another pair (a, b) if and only if b < c. Chain of pairs can be formed in this fashion.

Given a set of pairs, find the length longest chain which can be formed. You needn't use up all the given pairs. You can select pairs in any order.

Example 1:

Input: [[1,2], [2,3], [3,4]]
Output: 2
Explanation: The longest chain is [1,2] -> [3,4]


Note:

1. The number of given pairs will be in the range [1, 1000].

========================================================

C++代码：

inline bool cmp(const vector<int> &a, const vector<int> &b){
return a[0] < b[0];
}
class Solution {
public:
int findLongestChain(vector<vector<int>>& pairs) {
sort(pairs.begin(),pairs.end(),cmp);
if(pairs.size() == 0) return 0;
int n = pairs.size();
vector<int> dp(n,1);
int res = 1;
for(int i = 1; i < n; i++){
for(int j = 0; j < i; j++){
if(pairs[i][0] > pairs[j][1] && dp[i] < dp[j] + 1)
dp[i] = dp[j] + 1;
}
res = max(res,dp[i]);
}
return res;
}
};

posted @ 2019-05-10 21:15  PJCK  阅读(26)  评论(0编辑  收藏