fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int getSum(const vector<int>& nums, int k, const std::function<int(int, int)>& compFunc){
  5.  
  6. int n = nums.size();
  7.  
  8. if(k==0 || k>n){
  9. return 0;
  10. }
  11.  
  12. vector<vector<int>> dp(k+1, vector<int>(n, INT_MAX));
  13.  
  14. dp[1][0] = 2*nums[0];
  15. for(int i=1; i<n; i++){
  16. dp[1][i] = nums[0]+nums[i];
  17. }
  18.  
  19. for(int i=2; i<=k; i++){
  20. for(int j=i-1; j<n; j++){
  21.  
  22. dp[i][j] = 2*nums[j] + dp[i-1][j-1];
  23. for(int p=2; p<=j-i+2; p++){
  24.  
  25. dp[i][j] = compFunc(dp[i][j], nums[j]+nums[j-p+1]+dp[i-1][j-p]);
  26. }
  27. }
  28. }
  29.  
  30. return dp[k][n-1];
  31. }
  32.  
  33. int main() {
  34.  
  35. int n, k;
  36. cin>>n>>k;
  37.  
  38. vector<int> nums(n);
  39. for(int i=0; i<n; i++){
  40. cin>>nums[i];
  41. }
  42.  
  43. cout<<getSum(nums, k, [](int x, int y){return min(x, y);})<<endl;
  44. cout<<getSum(nums, k, [](int x, int y){return max(x, y);})<<endl;
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0s 5288KB
stdin
5 3
1 2 3 4 5
stdout
14
22