//Memoization
// int f(int ind,vector<int>&height,vector<int>&dp,int k){
// if(ind==0){
// return 0;
// }
// if(dp[ind]!=-1) return dp[ind];
// int minSteps=INT_MAX,ans=0;
// for(int j=1;j<=k;j++){
// if(ind-j>=0){
// int jump=f(ind-j,height,dp,k)+abs(height[ind]-height[ind-j]);
// minSteps=min(minSteps,jump);
// }
// }
// return dp[ind]=minSteps;
// }
//Tabulation
int f(int ind,vector<int>&height,vector<int>&dp,int k){
dp[0]=0;
for (int i=1;i<ind;i++){
int mmSteps=INT_MAX;
for(int j=1;j<=k;j++){
if(i-j>=0){
int jump=dp[i-j]+abs(height[i]-height[i-j]);
mmSteps=min(jump,mmSteps);
}
}
dp[i]=mmSteps;
}
return dp[ind-1];
}
int minimizeCost(int n, int k, vector<int> &height){
// Write your code here.
// vector<int>dp(n+1,-1); Memoization
vector<int>dp(n,-1);
// return f(n-1,height,dp,k);Memoization
return f(n,height,dp,k);
}