만드는 중입니다

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

최적의 괄호

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

요약
괄호 문자열의 부분수열 중 올바른 괄호 문자열이 되는 것을 골라 선택한 c 값의 합을 최대로 만드는 문제입니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 분할 정복, 그리디, 힙
정답자
아직 제출이 없습니다

문제

여는 괄호 (와 닫는 괄호 )로만 이루어진 문자열이 다음 조건 중 하나를 만족하면 균형 잡힌 문자열이라고 한다.

  • 빈 문자열이다.
  • 비어 있지 않은 균형 잡힌 문자열 두 개를 이어 붙인 것이다.
  • 균형 잡힌 문자열 aa에 대해 (, aa, )를 순서대로 이어 붙인 것이다.

괄호 문자 s1,…,sns_1, \dots, s_n과 정수 c1,…,cnc_1, \dots, c_n이 주어진다. 다음 조건을 만족하도록 0개 이상의 정수 t1,…,tkt_1, \dots, t_k를 고른다.

  • 1≤t1<t2<⋯<tk≤n1 \le t_1 < t_2 < \dots < t_k \le n이다.
  • st1,st2,…,stks_{t_1}, s_{t_2}, \dots, s_{t_k}를 순서대로 이어 붙인 문자열이 균형 잡힌 문자열이다.

아무것도 고르지 않아도 두 조건은 항상 만족한다.

∑i=1kcti\sum_{i=1}^{k} c_{t_i}의 최댓값을 구한다.

입력

첫 번째 줄에 정수 nn (1≤n≤300 0001 \le n \le 300\,000)이 주어진다. 두 번째 줄에는 nn개의 문자 s1s2⋯sns_1 s_2 \cdots s_n이 주어지며, 각 문자는 ( 또는 )이다. 세 번째 줄에는 nn개의 정수 c1c2⋯cnc_1 c_2 \cdots c_n (∣ci∣≤109|c_i| \le 10^9)이 주어진다.

출력

∑i=1kcti\sum_{i=1}^{k} c_{t_i}의 최댓값을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    5
    ()(()
    3 -9 -2 1 0
    
    예상 출력
    3
    
  2. 예제 2

    입력
    6
    )()()(
    -3 1 -4 1 -5 9
    
    예상 출력
    0