题意:
给你一堆pair(a,b),求最长的链接方式(用到的pair数最多),边界不能相交。
思路:
按前端升序,dp[i]表示使用第i个pair能链接多长,dp[i]是必定比dp[i-1],dp[i-2]..大的,因为若是dp[i-1]能连三个,则dp[i]也至少能连三个(因为前端比上一个小)。
所以可得到状态方程:dp[i] = max(dp[i],dp[j]+1) {0<=j<i}
代码:
class Solution {
public:
int findLongestChain(vector<vector<int>>& pairs) {
sort(pairs.begin(),pairs.end());
int n = pairs.size();
vector<int> dp(n,1);
for(int i = 1;i<n;i++)
{
for(int j = 0;j<i;j++)
{
if(pairs[j][1]<pairs[i][0])
dp[i] = max(dp[i],dp[j]+1);
}
}
return dp[n-1];
}
};