Gabriel_Duarte

Untitled

Apr 28th, 2014
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <cstring>
  3.  
  4. typedef long long int lli;
  5.  
  6. lli memoization[11000][11000];// 10001
  7. lli maxPontos(lli *vet, int n, int pos, int final)
  8. {
  9.     lli soma1, soma2;
  10.        
  11.    if(memoization[pos][final] != -1)
  12.     return memoization[pos][final];
  13.          
  14.    if(n == 2)
  15.     return memoization[pos][final] = vet[0] > vet[1] ? vet[0] : vet[1];
  16.    
  17.    
  18.    soma1 = vet[0] + (vet[1] > vet[n-1] ? maxPontos(&vet[2], n-2, pos + 2, final) : maxPontos(&vet[1], n-2, pos + 1, final-1));
  19.     soma2 = vet[n - 1] + (vet[n - 2] > vet[0] ? maxPontos(&vet[0], n-2, pos, final-2) : maxPontos(&vet[1], n-2, pos + 1, final-1));
  20.    
  21.     return memoization[pos][final] = soma1 > soma2 ? soma1 : soma2;
  22.  
  23. }
  24.  
  25.  
  26.  
  27. int main()
  28. {
  29.     int n;
  30.  
  31.     while(scanf("%d", &n) != EOF)
  32.    {
  33.       lli vet[n];
  34.    
  35.       for(int i = 0; i < n; i++)
  36.         scanf("%lld", &vet[i]);
  37.      
  38.      for(int i = 0; i < n; i++)
  39.         for(int j = 0; j < n; j++)
  40.             memoization[i][j] = -1;
  41.        
  42.         printf("%lld\n", maxPontos(vet, n, 0, n-1));
  43.          
  44.    }
  45.    
  46.    return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment