Buggy python submission (verdict: Time Limit Exceeded):
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


import numpy as np
N, K = read_ints()
# H = np.array(read_ints())
# K = min(len(H), K)

# dp = np.full((N), np.inf)
# dp[0] = 0
# # Kまで初期化しておかないと厄介なことになる
# # i-kのコストは直接飛ぶのが必ず最小になる
# dp[1:K+1] = np.abs(H[0]-H[1:K+1])

# for i in range(K+1, N):
#     # i-Kまでのコストリストを作成しておく
#     dp[i] = (dp[(i - K):(i)] + np.abs(H[i] - H[(i - K):(i)])).min()


# print(int(dp[-1]))


# 配るDPでもやる

K = min(N, K)
H = read_ints() + [0 for _ in range(K)]
H = np.array(H)
dp = np.full((N + K), np.inf)
dp[0] = 0
for i in range(N):
    # 配るDPでやる
    for k in range(1, K+1):
        dp[i + k] = min(dp[i + k], dp[i] + abs(H[i] - H[i + k]))

# print(dp)
print(int(dp[N-1]))


Fixed submission:
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


import numpy as np
N, K = read_ints()
H = np.array(read_ints())
K = min(len(H), K)

dp = np.full((N), np.inf)
dp[0] = 0
# Kまで初期化しておかないと厄介なことになる
# i-kのコストは直接飛ぶのが必ず最小になる
dp[1:K+1] = np.abs(H[0]-H[1:K+1])

for i in range(K+1, N):
    # i-Kまでのコストリストを作成しておく
    dp[i] = (dp[(i - K):(i)] + np.abs(H[i] - H[(i - K):(i)])).min()


print(int(dp[-1]))


# 配るDPでもやってみる

Buggy python submission (verdict: Runtime Error):
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


import numpy as np
N, K = read_ints()
H = np.array(read_ints())
K = min(len(H), K)

dp = np.full((N), np.inf)
dp[0] = 0
# Kまで初期化しておかないと厄介なことになる
# i-kのコストは直接飛ぶのが必ず最小になる
dp[1:K+1] = np.abs(H[0]-H[1:K+1])

for i in range(K+1, N):
    # i-Kまでのコストリストを作成しておく
    dp[i] = (dp[(i - K):(i)] + np.abs(H[i] - H[(i - K):(i)])).min()


print(int(dp[-1]))


# 配るDPでもやってみる


Fixed submission:
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


import numpy as np
N, K = read_ints()
H = np.array(read_ints())
K = min(len(H), K)

dp = np.full((N), np.inf)
dp[0] = 0
# Kまで初期化しておかないと厄介なことになる
# i-kのコストは直接飛ぶのが必ず最小になる
dp[1:K+1] = np.abs(H[0]-H[1:K+1])

for i in range(K+1, N):
    # i-Kまでのコストリストを作成しておく
    dp[i] = (dp[(i - K):(i)] + np.abs(H[i] - H[(i - K):(i)])).min()


print(int(dp[-1]))


# 配るDPでもやってみる

Buggy python submission (verdict: Runtime Error):
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


import numpy as np
N, K = read_ints()
H = read_ints()

dp = np.full((N), float('inf'))
dp[0] = 0
dp[1] = abs(H[0] - H[1])
# Kまで初期化しておかないと厄介なことになる
# i-kのコストは直接飛ぶのが必ず最小になる
dp[1:K+1] = [abs(H[0]-H[k]) for k in range(1, K+1)]


for i in range(K+1, N):
    # i-Kまでのコストリストを作成しておく
    costs = [dp[i-k] + abs(H[i] - H[i - k]) for k in range(1, K + 1)]
    dp[i] = min(costs)

print(int(dp[-1]))


Fixed submission:
import sys
read = sys.stdin.readline


def read_ints():
    return list(map(int, read().split()))


import numpy as np
N, K = read_ints()
H = np.array(read_ints())
K = min(len(H), K)

dp = np.full((N), np.inf)
dp[0] = 0
# Kまで初期化しておかないと厄介なことになる
# i-kのコストは直接飛ぶのが必ず最小になる
dp[1:K+1] = np.abs(H[0]-H[1:K+1])

for i in range(K+1, N):
    # i-Kまでのコストリストを作成しておく
    dp[i] = (dp[(i - K):(i)] + np.abs(H[i] - H[(i - K):(i)])).min()


print(int(dp[-1]))


# 配るDPでもやってみる