fork download
  1. #include<bits/stdc++.h>
  2. #define ll long long int
  3. #define pii pair<int, int>
  4. #define vll vector<ll>
  5.  
  6. using namespace std;
  7.  
  8. map<pii, ll> dp;
  9.  
  10. int recur(vll values, int i, int j){
  11. // base case
  12. int n = (int)values.size();
  13. if(i== (n-1))
  14. return 0;
  15.  
  16. if(dp.find({i,j}) != dp.end()){
  17. return dp[{i,j}];
  18. }
  19. int a = INT_MAX;
  20. int b = a;
  21. if(i>0 && (i-j+1)>=0)
  22. a = values[i-j + 1] + recur(values, i-j+1, j);
  23. if(i+j < n)
  24. b = values[i+j] + recur(values, i+j, j+1);
  25. return dp[{i,j}] = min(a, b);
  26. }
  27. int main(){
  28. ll i, j, n;
  29. cin>>n;
  30. vll arr(n, 0);
  31. for(i=0;i<n;i++){
  32. cin>>arr[i];
  33. }
  34. cout<< recur(arr, 0, 1)<<endl;
  35. return 0;
  36. }
Success #stdin #stdout 0s 5004KB
stdin
6
4 10 -3 1 6 1
stdout
12