Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <cstring>
- typedef long long int lli;
- lli memoization[11000][11000];// 10001
- lli maxPontos(lli *vet, int n, int pos, int final)
- {
- lli soma1, soma2;
- if(memoization[pos][final] != -1)
- return memoization[pos][final];
- if(n == 2)
- return memoization[pos][final] = vet[0] > vet[1] ? vet[0] : vet[1];
- 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));
- 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));
- return memoization[pos][final] = soma1 > soma2 ? soma1 : soma2;
- }
- int main()
- {
- int n;
- while(scanf("%d", &n) != EOF)
- {
- lli vet[n];
- for(int i = 0; i < n; i++)
- scanf("%lld", &vet[i]);
- for(int i = 0; i < n; i++)
- for(int j = 0; j < n; j++)
- memoization[i][j] = -1;
- printf("%lld\n", maxPontos(vet, n, 0, n-1));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment