Language: C++

#include <iostream>
#include <vector>
#include <fstream>

#define DBG(vari) cerr<<#vari<<" = "<<(vari)<<endl;
#define printA(a, L, R) FE(i,L,R) cout << a[i] << (i==R?'\n':' ')
#define printV(a) printA(a,0,a.size()-1)
//for vectors
#define pb push_back
#include <cmath>
#include <climits>
#include <queue>
#include <vector>
#include <map>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <sstream>  // istringstream buffer(myString);
#include <stack>
#include <algorithm>
#include <cstring>
#include <cassert>

using namespace std;

// directions
namespace imports {

    const int fx[4][2] = {{0,  1},
                          {0,  -1},
                          {1,  0},
                          {-1, 0}};
    const int fxx[8][2] = {{0,  1},
                           {0,  -1},
                           {1,  0},
                           {-1, 0},
                           {1,  1},
                           {1,  -1},
                           {-1, 1},
                           {-1, -1}};
#define bit(x, i) (x&(1<<i))  //select the bit of position i of x
#define lowbit(x) ((x)&((x)^((x)-1))) //get the lowest bit of x
#define hBit(msb, n) asm("bsrl %1,%0" : "=r"(msb) : "r"(n)) //get the highest bit of x, maybe the fastest
#define max(a, b) (a<b?b:a)
#define min(a, b) (a>b?b:a)
#define abs(x) (x<0?(-x):x) // big bug here if "-x" is not surrounded by "()"
#define IN(i, l, r) (l<i&&i<r) //the next for are for checking bound
#define LINR(i, l, r) (l<=i&&i<=r)
#define LIN(i, l, r) (l<=i&&i<r)
#define INR(i, l, r) (l<i&&i<=r)

#define wez2(n, m) int (n),(m); scanf("%d %d",&(n),&(m))
#define wez3(n, m, k) int (n),(m),(k); scanf("%d %d %d",&(n),&(m),&(k))
#define TESTS wez(testow)while(testow--) //for multilple cases problems
#define whileZ int T; getI(T); while(T--) // the same as above
#define getS(x) scanf("%s", x) //get a char* string
#define clr(a, x) memset(a,x,sizeof(a)) //set elements of array to some value
#define char2Int(c) (c-'0')
#define lastEle(vec) vec[vec.size()-1]
#define SZ(x) ((int)((x).size()))
#define REMAX(a, b) (a)=max((a),(b)) // set a to the maximum of a and b
#define REMIN(a, b) (a)=min((a),(b));
#define FOREACH(i, t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) // traverse an STL data structure
#define ALL(c) (c).begin(),(c).end() //handy for function like "sort()"
#define PRESENT(c, x) ((c).find(x) != (c).end())
#define CPRESENT(c, x) (find(ALL(c),x) != (c).end())
#define ll long long //data types used often, but you don't want to type them time by time
#define ull unsigned long long
#define us unsigned short
#define IOS ios_base::sync_with_stdio(0); //to synchronize the input of cin and scanf
#define INF 1001001001
#define PI 3.1415926535897932384626
//for map, pair
#define mp make_pair
#define fi first
#define se second

#define DBG(vari) cerr<<#vari<<" = "<<(vari)<<endl;
#define printA(a, L, R) FE(i,L,R) cout << a[i] << (i==R?'\n':' ')
#define printV(a) printA(a,0,a.size()-1)

#define ui unsigned int
//for vectors
#define pb push_back
    typedef int elem_t;
    typedef vector<int> vi;
    typedef vector<long> vl;
    typedef vector<vl> vvl;
    typedef vector<vi> vvi;
    typedef pair<int, int> ii;
    const ui MOD = 1E9 + 7;
#define F(i, L, R) for (int i = L; i < R; i++) //next four are for "for loops"
#define FE(i, L, R) for (int i = L; i <= R; i++)
#define FF(i, L, R) for (int i = L; i > R; i--)
#define FFE(i, L, R) for (int i = L; i >= R; i--)
#define getI(a) scanf("%d", &a) //next three are handy ways to get ints, it's also force you to use '&' sign
#define getII(a, b) scanf("%d%d", &a, &b)
#define getIII(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define wez(n) int (n); scanf("%d",&(n)) //handy if the input is right after the definition of a variable/
}


#define maxN 200
using namespace std;
using namespace imports;

//class Frog1 {
//public:
    int h[10000];

    int solve() {
        int N, K;
        //freopen("/Users/fbrubacher/Downloads/atcoder.in", "r", stdin);
        cin >> N >> K;
        vi dp(N);
        F(i, 0 , N) cin >> h[i];
        F(i, 0, N) {
            for (int j = i + 1; j <= i + K; j++ ) {
                if (j < N )
                    dp[j] = min(dp[j], dp[i] + abs(h[i] - h[j]));
            }
        }

        printf("%d\n", dp[N-1]);
    }

//};

Compiler output:
a.cc: In function 'int solve()':
a.cc:126:5: warning: no return statement in function returning non-void [-Wreturn-type]
  126 |     }
      |     ^
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x17): undefined reference to `main'
collect2: error: ld returned 1 exit status