动态规划
class Solution {
public:
/**
* @param nums: An integer array
* @return: The length of LIS (longest increasing subsequence)
*/
//输出路径
int longestIncreasingSubsequence(vector<int> &nums) {
// write your code here
int len=nums.size();
if(len==0)return 0;
int res=1;
int p=-1;
int pathindex[len];
int dp[len];
for(int i=0;i<len;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(nums[j]<nums[i]){
dp[i]=max(dp[i],dp[j]+1);
if(dp[i]==dp[j]+1)pathindex[i]=j;//记录在i前离i最近的状态转移位置构建索引路径
}
}
res=max(res,dp[i]);
if(dp[i]==res)p=i;//记录最长序列的末端索引
}
int path[res];
for(int i=res-1;i>-1;i--){
path[i]=nums[p];
p=pathindex[p];
}
for(int i=0;i<res;i++){
cout<<path[i]<<' ';
}
return res;
}
};