Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using ll=long long;
- ll n,m;
- ll dp[10005][305];
- ll ar[10005];
- using pi=pair<ll,ll>;
- #define all(x) x.begin(),x.end()
- vector<vector<ll>>idx;
- class Solution {
- public:
- ll fun(ll i,ll last)
- {
- ll &ret=dp[i][last];
- if (~ret)return ret;
- ret=1;
- ll mn=max(1LL,ar[i]-last);
- ll mx=min(m,ar[i]+last);
- for (int k=mn;k<=mx;k++)
- {
- ll j=idx[i+1][k];
- if (j!=-1){
- ll diff=abs(k-ar[i]);
- ret=max(ret,1+fun(j,diff));
- }
- }
- return ret;
- }
- int longestSubsequence(vector<int>& nums) {
- n=nums.size();
- for(int i=0;i<n;i++)ar[i]=nums[i];
- m=0;
- for (int i=0;i<n;i++)m=max(m,ar[i]);
- for(int i=0;i<=n;i++)
- for(int j=0;j<=m;j++)
- dp[i][j]=-1;
- idx=vector<vector<ll>>(n+1,vector<ll>(m+1,-1));
- for (int i=n-1;i>=0;i--)idx[i]=idx[i+1],idx[i][ar[i]]=i;
- ll ans=0;
- for (int i=0;i<n;i++)ans=max(ans,fun(i,m));
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment