import numpy as np

import sys

N, K = list(map(int,input().split()))

h = np.fromstring(eval(input()), dtype=np.int64, sep=' ')



# コスト無限大で初期化

INF = 10**10

dp = np.array([INF]*N)

dp[0] = 0

for i in range(1, N):

  # i番目の梯子までの最小移動コストは、

  # 「i-1番目までの移動コスト」+「i-1番目からi番目への移動コスト」

  # もしくは、

  # 「i-2番目までの移動コスト」+「i-2番目からi番目への移動コスト」

  # ...

  # もしくは、

  # 「i-K番目までの移動コスト」+「i-K番目からi番目への移動コスト」

  # のうち、最も小さいものが、最小移動コストになる

  

  # jをi-Kからi-1まで変化させながら、最小の組み合わせを探す

  # ただし、jが負の値にならないよう注意

  j_min = max(0, i-K)

  dp[i] = np.min(dp[j_min: i] + np.abs(h[i] - h[j_min: i]))



print((dp[N-1]))
import sys

read = sys.stdin.buffer.read

 

N, K, *h = list(map(int, read().split()))

# print(N, K, h)

 

def chmin(l, i, v):

  if l[i] > v:

    l[i] = v

    return True

  return False

 

def chmax(l, i, v):

  if l[i] < v:

    l[i] = v

    return True

  return False

 

# コスト無限大で初期化

INF = float("inf")

dp = [ INF ] * N

dp[0] = 0

 

for i in range(1, N):

  # i番目の梯子までの最小移動コストは、

  # 「i-1番目までの移動コスト」+「i-1番目からi番目への移動コスト」

  # もしくは、

  # 「i-2番目までの移動コスト」+「i-2番目からi番目への移動コスト」

  # ...

  # もしくは、

  # 「i-K番目までの移動コスト」+「i-K番目からi番目への移動コスト」

  # のうち、最も小さいものが、最小移動コストになる

  

  # jをi-Kからi-1まで変化させながら、最小の組み合わせを探す

  # ただし、jが負の値にならないよう注意

  for j in range(max(0, i-K), i):

    chmin(dp, i, dp[j] + abs(h[i] - h[j]))

  # print(dp)

 

print((dp[N-1]))
import numpy as np
import sys

N, K = list(map(int, input().split()))
h = np.fromstring(eval(input()), dtype=np.int64, sep=" ")
# コスト無限大で初期化
INF = 10**10
dp = np.array([INF] * N)
dp[0] = 0
for i in range(1, N):
    # i番目の梯子までの最小移動コストは、
    # 「i-1番目までの移動コスト」+「i-1番目からi番目への移動コスト」
    # もしくは、
    # 「i-2番目までの移動コスト」+「i-2番目からi番目への移動コスト」
    # ...
    # もしくは、
    # 「i-K番目までの移動コスト」+「i-K番目からi番目への移動コスト」
    # のうち、最も小さいものが、最小移動コストになる
    # jをi-Kからi-1まで変化させながら、最小の組み合わせを探す
    # ただし、jが負の値にならないよう注意
    j_min = max(0, i - K)
    dp[i] = np.min(dp[j_min:i] + np.abs(h[i] - h[j_min:i]))
print((dp[N - 1]))

import sys

read = sys.stdin.buffer.read
N, K, *h = list(map(int, read().split()))
# print(N, K, h)
def chmin(l, i, v):
    if l[i] > v:
        l[i] = v
        return True
    return False


def chmax(l, i, v):
    if l[i] < v:
        l[i] = v
        return True
    return False


# コスト無限大で初期化
INF = float("inf")
dp = [INF] * N
dp[0] = 0
for i in range(1, N):
    # i番目の梯子までの最小移動コストは、
    # 「i-1番目までの移動コスト」+「i-1番目からi番目への移動コスト」
    # もしくは、
    # 「i-2番目までの移動コスト」+「i-2番目からi番目への移動コスト」
    # ...
    # もしくは、
    # 「i-K番目までの移動コスト」+「i-K番目からi番目への移動コスト」
    # のうち、最も小さいものが、最小移動コストになる
    # jをi-Kからi-1まで変化させながら、最小の組み合わせを探す
    # ただし、jが負の値にならないよう注意
    for j in range(max(0, i - K), i):
        chmin(dp, i, dp[j] + abs(h[i] - h[j]))
    # print(dp)
print((dp[N - 1]))

-import numpy as np -N, K = list(map(int, input().split())) -h = np.fromstring(eval(input()), dtype=np.int64, sep=" ") +read = sys.stdin.buffer.read +N, K, *h = list(map(int, read().split())) +# print(N, K, h) +def chmin(l, i, v): +    if l[i] > v: +        l[i] = v +        return True +    return False + + +def chmax(l, i, v): +    if l[i] < v: +        l[i] = v +        return True +    return False + + -INF = 10**10 -dp = np.array([INF] * N) +INF = float("inf") +dp = [INF] * N -    j_min = max(0, i - K) -    dp[i] = np.min(dp[j_min:i] + np.abs(h[i] - h[j_min:i])) +    for j in range(max(0, i - K), i): +        chmin(dp, i, dp[j] + abs(h[i] - h[j])) +    # print(dp)