Solução Informática Avançado – Semana 64

por

Solução por Lúcio Cardoso

Seja $$dp[i][0]$$ o menor custo para derrubar todos os pilares de $$1$$ a $$i$$ e $$dp[i][1]$$ o menor custo para derrubar todos os pilares de $$1$$ a $$i$$, assumindo que o pilar $$i+1$$ foi derrubado antes do pilar $$i$$.

Assim,

$$dp[i][0] = min(dp[i-1][1] + d[i], dp[i-1][0] + max(0, d[i]-w[i-1]))$$.

Ou seja, analisamos as respostas analisando se o pilar $$i$$ foi derrubado antes ou depois do pilar $$i-1$$.

Além disso,

$$dp[i][1] = min(dp[i-1][1] + max(0, d[i]-w[i+1]), dp[i-1][0] + max(0, d[i]-w[i]-w[i+1]))$$. 

Novamente, analisamos cada um dos casos dentre derrubar $$i$$ antes ou depois de $$i-1$$, sabendo que $$i+1$$ já foi derrubado.

A resposta final do problema será $$dp[N][0]$$, e é fácil perceber que a complexidade final é $$O(n)$$.

 

https://gist.github.com/luciocf/80547a2481a8af24e71a1826c3868220