Language: C++

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

#define rep(i, N) for (int i = 0; i < (int)N; i++)
const ll MOD = pow(10,9)+7;
const ll LLINF = pow(2,61)-1;
const int INF = pow(2,30)-1;

const int N_MAX = 310;

int N, K;
vector<ll> H;

vector<vector<ll>> dp;

ll dfs(int n, int k) {
  if (dp[n][k]!=-1) return dp[n][k];
  if (n<k) return dp[n][k] = LLINF;
  if (k==0) return dp[n][k] = 0;
  if (k==1) return dp[n][k] = H[n-1];
  ll result = LLINF;
  for (int i=k-1; i<n; i++) {
    result = min(result, dfs(i,k-1)+max(0,H[n-1]-H[i-1]));
  }
  return dp[n][k] = result;
}

int main() {
  cin >> N >> K;
  dp.resize(N+1,vector<ll>(N+1,-1));
  rep(i,N) { int tmp; cin >> tmp; H.push_back(tmp); }
  // rep(i,N+1) { rep(j,N+1) cout << dfs(i,j) << " "; cout << endl; }
  ll result = dfs(N,N-K);
  cout << result << endl;
  return 0;
}


Compiler output:
a.cc: In function 'll dfs(int, int)':
a.cc:25:40: error: no matching function for call to 'max(int, __gnu_cxx::__alloc_traits<std::allocator<long long int>, long long int>::value_type)'
   25 |     result = min(result, dfs(i,k-1)+max(0,H[n-1]-H[i-1]));
      |                                     ~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_algobase.h:257:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note:   template argument deduction/substitution failed:
a.cc:25:40: note:   deduced conflicting types for parameter 'const _Tp' ('int' and '__gnu_cxx::__alloc_traits<std::allocator<long long int>, long long int>::value_type' {aka 'long long int'})
   25 |     result = min(result, dfs(i,k-1)+max(0,H[n-1]-H[i-1]));
      |                                     ~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note:   candidate expects 3 arguments, 2 provided
In file included from /usr/include/c++/14/algorithm:61:
/usr/include/c++/14/bits/stl_algo.h:5706:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)'
 5706 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5706:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5716:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)'
 5716 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5716:5: note:   template argument deduction/substitution failed:
a.cc:25:40: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   25 |     result = min(result, dfs(i,k-1)+max(0,H[n-1]-H[i-1]));
      |                                     ~~~^~~~~~~~~~~~~~~~~