만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

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