/* -*- coding: utf-8 -*- * * 2591.cc: No.2591 安上がりな括弧列 - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int MAX_N = 1000; const int MAX_N2 = MAX_N * 2; /* typedef */ typedef long long ll; typedef pair pii; typedef set spii; /* global variables */ char s[MAX_N2 + 4]; int as[MAX_N2]; /* subroutines */ ll check(int n2, char ob, char cb) { spii ps; ll sum = 0; for (int i = 0, d = 0; i < n2; i++) { if (s[i] == ob) { d++; } else { ps.insert(pii(as[i], i)); d--; if (d < 0) { sum += ps.begin()->first; s[ps.begin()->second] = ob; d += 2; ps.erase(ps.begin()); } } } return sum; } /* main */ int main() { int n; scanf("%d%s", &n, s); int n2 = n * 2; for (int i = 0; i < n2; i++) scanf("%d", as + i); ll s0 = check(n2, '(', ')'); reverse(s, s + n2); reverse(as, as + n2); ll s1 = check(n2, ')', '('); printf("%lld\n", s0 + s1); return 0; }