Проблема может быть решена с помощью DP.
После первого выстрела проблема больше не будет круговой. Урон монстров, оставшихся после атаки, можно рассчитать с помощью DP. Позволяет NB
количество балконов.
Определите D[n,m]
для n<=m
или m+4<=n
как урон монстров, оставленных на балконах b
, n<=b<=m
или m<=b<=n
.
If n <= m < n+3 than D[n,m] = sum A[i] for n<=i<=m.
If m >= n+3 than D[n,m] =
min{ 2*D[n,i-1] + D[i,i+2] + 2*D[i+3,m] } for i in {n,...,m}.
If m < n than D[n,m] =
min{ 2*D[n,i-1] + D[i,i+2] + 2*D[i+3,m] } for i in {n,...,NB} U {1,...,m}.
Результат min{ D[i+3,NB+i-1] for i in {1,...,NB-2} }
.
В третьем случае и индексы результата по модулю NB.
Этот подход имеет сложность O(n^3)
.