记忆化搜索即可。
class Solution {
public:
vector<int>g[1024];
int dp[1003];
int dep=0;
void dfs(int u,int pos){
dep=max(dep,pos);
if(dp[u]){
dep=max(dep,pos-1+dp[u]);
return;
}
for(int v:g[u]){
dfs(v,pos+1);
}
}
int maxJumps(vector<int>& a, int d) {
int n=a.size();
pair<int,int>p[n+1];
for(int i=0;i<n;i++){
p[i]={a[i],i};
for(int j=i-1;j>=max(0,i-d);j--){
if(a[i]>a[j])g[i].push_back(j);
else break;
}
for(int j=i+1;j<=min(n-1,i+d);j++){
if(a[i]>a[j])g[i].push_back(j);
else break;
}
}
sort(p,p+n);
int ans=0;
for(int i=0;i<n;i++){
dep=0;
dfs(p[i].second,1);
ans=max(ans,dep);
dp[p[i].second]=dep;
}
return ans;
}
};
京公网安备 11010502036488号