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
