結果
| 問題 |
No.2591 安上がりな括弧列
|
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 2025-03-24 21:39:21 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 92 ms / 2,000 ms |
| コード長 | 560 bytes |
| コンパイル時間 | 308 ms |
| コンパイル使用メモリ | 82,348 KB |
| 実行使用メモリ | 76,376 KB |
| 最終ジャッジ日時 | 2025-03-24 21:39:24 |
| 合計ジャッジ時間 | 3,188 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
ソースコード
INF = 1 << 60
N = int(input())
S = input()
A = list(map(int, input().split()))
sz = 2 * N + 1
dp = [INF] * sz
dp[0] = 0
for i, (c, a) in enumerate(zip(S, A)):
pp = [INF] * sz
dp, pp = pp, dp
for j in range(2 * N):
if pp[j] == INF: continue
if c == '(':
dp[j+1] = min(dp[j+1], pp[j])
if j > 0:
dp[j-1] = min(dp[j-1], pp[j] + a)
elif c == ')':
if j > 0:
dp[j-1] = min(dp[j-1], pp[j])
dp[j+1] = min(dp[j+1], pp[j] + a)
ans = dp[0]
print(ans)
norioc