1.


class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n=nums.size();
vector<int> ret(n,1);
ret[0]=1;
int a=1;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j]) ret[i]=max(ret[j]+1,ret[i]);
a=max(a,ret[i]);
}
};
return a;
}
};
2.


class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int n=nums.size();
vector<int> f(n,1);
auto g=f;
int ret=1;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j]) f[i]=max(g[j]+1,f[i]);
else if(nums[i]<nums[j]) g[i]=max(f[j]+1,g[i]);
}
ret=max(ret,max(f[i],g[i]));
}
return ret;
}
};



class Solution {
public:
int findLongestChain(vector<vector<int>>& pairs) {
sort(pairs.begin(),pairs.end());
int n=pairs.size();
vector<int> ret(n,1);
int r=1;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(pairs[j][1]<pairs[i][0]) ret[i]=max(ret[i],ret[j]+1);
}
r=max(r,ret[i]);
}
return r;
}
};
4.
\

class Solution {
public:
int longestSubsequence(vector<int>& arr, int difference) {
unordered_map<int,int> ret;
ret[arr[0]]=1;
int sum=1;
for(int i=1;i<arr.size();i++){
ret[arr[i]]=ret[arr[i]-difference]+1;
sum=max(sum,ret[arr[i]]);
}
return sum;
}
};
5.


class Solution {
public:
int lenLongestFibSubseq(vector<int>& arr) {
int n=arr.size();
unordered_map<int,int> hash;
for(int i=0;i<n;i++) hash[arr[i]]=i;
vector<vector<int>> dp(n,vector<int>(n,2));
int ret=2;
for(int j=2;j<n;j++){
for(int i=1;j>i;i++){
int a=arr[j]-arr[i];
if(a<arr[i]&&hash.count(a)) dp[i][j]=dp[hash[a]][i]+1;
ret=max(ret,dp[i][j]);
}
}
return ret>=3?ret:0;
}
};