Advertisement
rayated

Untitled

Dec 21st, 2024
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int solve(int n, int m, int current, const vector<int> &a)
  5. {
  6.   vector<vector<int>> dp(2, vector<int>(n, 0));
  7.   for (int len = 1; len <= n; len++)
  8.   {
  9.     int curr = (len - 1) % 2;
  10.     int prev = len % 2;
  11.  
  12.     for (int left = 0; left + len <= n; left++)
  13.     {
  14.       int right = left + len - 1;
  15.       int player = (n - len) % m;
  16.  
  17.       if (player == current)
  18.       {
  19.         dp[curr][left] = max(a[left] + dp[prev][left + 1], a[right] + dp[prev][left]);
  20.       }
  21.       else
  22.       {
  23.         dp[curr][left] = min(dp[prev][left + 1], dp[prev][left]);
  24.       }
  25.     }
  26.   }
  27.  
  28.   return dp[(n - 1) % 2][0];
  29. }
  30.  
  31. int main()
  32. {
  33.   ios_base::sync_with_stdio(false);
  34.   cin.tie(NULL);
  35.  
  36.   int n, m;
  37.   cin >> n >> m;
  38.  
  39.   vector<int> a(n);
  40.   for (int i = 0; i < n; i++)
  41.   {
  42.     cin >> a[i];
  43.   }
  44.  
  45.   for (int current = 0; current < m; current++)
  46.   {
  47.     cout << solve(n, m, current, a) << " ";
  48.   }
  49.   cout << endl;
  50.  
  51.   return 0;
  52. }
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement