DNA 자르기

면접 대비

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

요약
조각들의 길이가 순서대로 주어질 때, 자를 때마다 현재 사슬 길이만큼 에너지가 드는 규칙에서 원래 사슬을 분할하는 최소 총에너지를 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 구간, 누적 합, 그리디
정답자
아직 제출이 없습니다

문제

긴 DNA 사슬을 더 작은 사슬로 자르는 단백질을 연구하고 있다. 이 단백질은 다음과 같이 동작한다. 긴 DNA 사슬을 자르기 위해 단백질은 먼저 사슬 전체를 "읽고" 두 부분(반드시 같을 필요는 없다)으로 자른 다음, 두 작은 사슬을 재귀적으로 자른다.

사슬 S1S2S_1S_2를 두 부분 S1S_1과 S2S_2로 자르는 데는 S1S2S_1S_2의 길이(S1S_1의 길이와 S2S_2의 길이의 합)에 비례하는 에너지가 든다. 더 일반적으로, 사슬 S1…SNS_1 \ldots S_N (N>1N > 1)을 자르는 데는 이를 둘로 자르는 데 드는 S1…SNS_1 \ldots S_N의 길이에 비례하는 에너지에, 두 작은 사슬을 재귀적으로 자르는 데 필요한 에너지를 더한 만큼이 든다.

원래 DNA 사슬 S1…SNS_1 \ldots S_N과, 자른 뒤 얻은 NN개의 조각 S1,…,SNS_1, \ldots, S_N을 알고 있다. 자연은 보통 에너지 효율이 매우 높기 때문에, DNA 사슬을 자르는 데 필요한 최소 에너지가 얼마인지 궁금하다.

이 최소 에너지의 계산은 L1,…,LNL_1, \ldots, L_N에만 달려 있다는 것을 알아냈다. 여기서 LiL_i는 SiS_i의 길이이다. NN개의 정수 L1,…,LNL_1, \ldots, L_N이 주어질 때, 긴 사슬을 이 조각들로 자르는 데 단백질이 필요로 하는 최소 에너지를 계산하려고 한다.

입력

입력은 두 줄로 이루어진다.

  • 첫째 줄: 문자열의 개수 NN, 정수이다.
  • 둘째 줄: L1,…,LNL_1, \ldots, L_N을 나타내는 공백으로 구분된 NN개의 정수.

출력

원래 사슬을 자르는 데 필요한 최소 총 에너지, 정수 하나를 한 줄에 출력한다.

제한

  • 1≤N≤5001 \le N \le 500;
  • 모든 1≤i≤N1 \le i \le N에 대해 0≤Li≤10140 \le L_i \le 10^{14}.

예제2

  1. 예제 1

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

    입력
    3
    2 1 1
    
    예상 출력
    6