sandeep03edu

Removal Game

Aug 10th, 2022
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define MOD 1000000007;
  5.  
  6. #define got cout<<"YES\n"; return;
  7. #define got0 cout<<"YES\n"; return 0;
  8.  
  9. #define bhak cout<<"NO\n"; return;
  10. #define bhak0 cout<<"NO\n"; return 0;
  11.  
  12. #define bas cout<<"\n";
  13.  
  14. ll getAns(ll i, ll j, ll n, bool picked, vector<ll> &vec, vector<vector<vector<ll>>> &dp){
  15.     if(i>j){
  16.         return 0;
  17.     }
  18.    
  19.     if(dp[i][j][picked]!=-1){
  20.         return dp[i][j][picked];
  21.     }
  22.    
  23.     if(picked){
  24.         ll pickFirst = vec[i] + getAns(i+1, j, n-1, false, vec, dp);
  25.         ll pickLast = vec[j] + getAns(i, j-1,n-1, false, vec, dp);
  26.         return dp[i][j][picked] = max(pickLast, pickFirst);
  27.     }
  28.  
  29.     ll pickFirst = getAns(i+1, j, n-1, true, vec, dp);
  30.     ll pickLast = getAns(i, j-1, n-1, true, vec, dp);
  31.    
  32.     return dp[i][j][picked] = min(pickFirst, pickLast);
  33. }
  34.  
  35. ll getAnsOpt(vector<ll> &vec){
  36.     ll n = vec.size();
  37.     vector<vector<vector<ll>>> dp(n+1, vector<vector<ll>> (n+1, vector<ll> (2, 0)));
  38.    
  39.     for(ll i=0; i<=n; ++i){
  40.         for(ll j=0; j<i; ++j){
  41.             for(ll k=0; k<2; ++k){
  42.                 dp[i][j][k]=0;
  43.             }
  44.         }
  45.     }
  46.    
  47.     for(ll i=0; i<n; ++i){
  48.         for(ll j=n-1; j>i; --j){
  49.             for(ll k=0; k<2; ++k){
  50.                 if(k==1){
  51.                     dp[i][j][k] = max(vec[i] + dp[i+1][j][0], vec[j] + dp[i][j-1][0]);
  52.                 }
  53.                 else{
  54.                     dp[i][j][k] = min(dp[i+1][j][1], dp[i][j-1][1]);
  55.                 }
  56.             }
  57.         }
  58.     }
  59.    
  60.     return dp[0][n-1][1];
  61. }
  62.  
  63. int main() {
  64.     // your code goes here
  65.     ll n; cin>>n;
  66.     vector<vector<vector<ll>>> dp(n+1, vector<vector<ll>> (n+1, vector<ll> (2, -1)));
  67.     vector<ll> vec(n);
  68.    
  69.     for(ll i=0; i<n; ++i){
  70.         cin>>vec[i];
  71.     }
  72.    
  73.     // ll ans = getAns(0, n-1,n, true, vec, dp);
  74.     ll ans = getAnsOpt(vec);
  75.     cout<<ans;
  76.    
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment