This Top Down code Not Working

#include<bits/stdc++.h>

using namespace std;

int dp[100005];

int solve(int a[],int n,int k1,int j)
{

//base case
if(j==0)
return 0;

if(dp[j]!=0){
return dp[j];
}

int ans=INT_MAX;

for(int k=1;k<=k1;k++){

if(j-k>=0)
ans=min(ans,abs(a[j]-a[j-k])+solve(a,n,k1,j-k));

}
return dp[j]=ans;

}

int main(){

memset(dp, 0, sizeof(dp));

int n,k1;

cin>>n>>k1;

int a[n];

for(int i=0;i<n;i++)
cin>>a[i];

cout<<solve(a,n,k1,n-1);

return 0;

}

getting tle in one case

@sonal_kumar use the initial state dp as -1 instead of 0 since 0 can be a possible answer also!