아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Flyttkartonger

면접 대비

시간 제한1초메모리 제한1024 MB

요약
인접한 더미로 이동하며 위 칸을 밀어 내릴 수 있을 때, 첫 번째 더미에 상자를 최소 몇 개 더 쌓아야 마지막 더미까지 갈 수 있는지 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 배열, 그리디
정답자
아직 제출이 없습니다

문제

Du har just hjälpt en kompis att flytta, men tyvärr har du fastnat i fel ände av en smal korridor full med flyttkartonger. Korridoren består av NN staplar av flyttkartonger, där stapel nummer ii innehåller a_ia\_i kartonger. Alla kartonger är lika stora.

Det enda sättet att ta sig ut är att gå ovanpå staplarna från stapel 11 till stapel NN. Om man befinner sig på en stapel kan man gå till en närliggande stapel, men bara om den inte är högre än den man står på. Om stapeln man står är minst två kartonger högre än en närliggande stapel kan man dessutom knuffa ner den översta kartongen från stapeln man står på till den närliggande stapeln. Detta kan upprepas hur många gånger som helst. 

Du befinner dig just nu på stapel 11. Tyvärr kanske det är omöjligt för dig att komma till stapel NN. Men som tur är får du lägga till valfritt antal extra kartonger till stapel 11 innan du börjar gå. Skriv ett program som beräknar hur många extra kartonger du behöver lägga till för att kunna ta dig till stapel NN.

Bilden visar exempel 1. De mörkgrå kartongerna är extrakartonger. Strategin är alltså att knuffa ner den översta extrakartongen till stapel 2. Därefter kan man gå raka vägen till stapel 4. Det hade inte hade fungerat med färre än 3 extrakartonger.

입력

På första raden står ett heltal NN, antalet staplar. På andra raden står NN heltal a_ia\_i, antalet kartonger i varje stapel.

출력

Programmet ska skriva ut ett heltal: det minsta antalet extra flyttkartonger som behöver läggas till.

제한

  • 3≤N≤203\le N\le 20
  • 1≤a_i≤30001 \le a\_i \le 3000

예제3

  1. 예제 1

    입력
    4
    1 2 3 2
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3
    5 2 3
    
    예상 출력
    0
    
  3. 예제 3

    입력
    6
    30 5 10 15 13 30
    
    예상 출력
    261