fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. const int MAX_N = 1e5;
  7.  
  8. int n, k;
  9. int h[MAX_N];
  10. int memo[MAX_N];
  11.  
  12. int dp(int i) {
  13. if (i == 0) {
  14. return 0;
  15. }
  16.  
  17. if (memo[i] != -1) {
  18. return memo[i];
  19. }
  20.  
  21. int result = 1e9;
  22. for (int j = 1; j <= k; ++j) {
  23. if (i - j >= 0) {
  24. result = min(result, dp(i - j) + abs(h[i] - h[i - j]));
  25. }
  26. }
  27.  
  28. memo[i] = result;
  29. return memo[i];
  30. }
  31.  
  32. int main() {
  33. cin >> n >> k;
  34.  
  35. memset(memo, -1, sizeof(memo));
  36.  
  37. for (int i = 0; i < n; ++i) {
  38. cin >> h[i];
  39. }
  40.  
  41. cout << dp(n - 1);
  42.  
  43. return 0;
  44. }
Success #stdin #stdout 0s 5284KB
stdin
10 4
40 10 20 70 80 10 20 70 80 60

stdout
40