Solução escrita por Malu Azevedo
Conhecimentos necessários:
O problema nos pede para determinar a quantidade máxima de moedas que Erika consegue armazenar em pilhas de forma estável, respeitando os limites máximos de cada pilha e a restrição de que a diferença entre a quantidade de moedas de pilhas adjacentes não pode ser maior do que 1.
Ideia Central
A ideia central para resolver o problema de forma ótima e eficiente consiste em aplicar uma abordagem gulosa utilizando duas varreduras lineares independentes, uma da esquerda para a direita e outra da direita para a esquerda. Como cada pilha impõe uma restrição sobre a sua altura máxima que se propaga para os vizinhos devido à regra de variação máxima de uma unidade, podemos ajustar os limites de forma incremental. Na primeira varredura, garantimos que nenhuma pilha ultrapasse a altura da pilha anterior acrescida de uma unidade, propagando o teto máximo da esquerda para a direita. Na segunda varredura, fazemos o oposto ao percorrer o vetor de trás para frente, assegurando que nenhuma pilha viole a restrição em relação à sua vizinha da direita. Ao combinar essas duas restrições propagadas, cada pilha assume automaticamente o maior valor possível que respeita tanto o seu limite original quanto as restrições impostas por todo o resto do vetor, bastando somar todas as alturas finais para obter a quantidade máxima total de moedas.
Abordagem Completa
Lemos a quantidade de pilhas e preenchemos o vetor de alturas utilizando o tipo long long para evitar estouros de capacidade. Em seguida, executamos um primeiro laço de 1 até verificando se a pilha atual excede a altura da anterior mais um (h[i] > h[i-1] + 1), atualizando-a para o valor máximo permitido caso a condição seja verdadeira. Logo após, executamos o segundo laço de até 0 checando se a pilha atual excede a altura da posterior mais um (h[i] > h[i+1] + 1), realizando a correção correspondente pela direita. Por fim, percorremos todo o vetor processado acumulando os valores em uma variável de soma moedas e imprimimos o resultado final. A complexidade de tempo é linear .
