結果
| 問題 |
No.2591 安上がりな括弧列
|
| コンテスト | |
| ユーザー |
aketijyuuzou
|
| 提出日時 | 2025-02-20 22:30:23 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
AC
|
| 実行時間 | 265 ms / 2,000 ms |
| コード長 | 2,618 bytes |
| コンパイル時間 | 2,646 ms |
| コンパイル使用メモリ | 114,156 KB |
| 実行使用メモリ | 53,080 KB |
| 最終ジャッジ日時 | 2025-02-20 22:30:30 |
| 合計ジャッジ時間 | 6,613 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
// https://yukicoder.me/problems/no/2591
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("3");
WillReturn.Add(")(((()");
WillReturn.Add("10 22 3 5 2 13");
//15
}
else if (InputPattern == "Input2") {
WillReturn.Add("4");
WillReturn.Add("()(()())");
WillReturn.Add("3141592 653589 793238 462643 38327 9502884 1971 69399375");
//0
}
else if (InputPattern == "Input3") {
WillReturn.Add("5");
WillReturn.Add("((((((((((");
WillReturn.Add("1 2 3 4 5 6 7 8 9 10");
//30
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
char[] CharArr = InputList[1].ToCharArray();
long[] CostArr = InputList[2].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long UB = CharArr.GetUpperBound(0);
// コスト[括弧の深さ]なDP表
var PrevDP = new Dictionary<long, long>();
PrevDP[0] = 0;
for (long I = 0; I <= UB; I++) {
var CurrDP = new Dictionary<long, long>();
foreach (var EachPair in PrevDP) {
Action<char, long> UpdateAct = (pNewChar, pCost) =>
{
long NewKey = EachPair.Key;
if (pNewChar == ')') {
if (--NewKey < 0) {
return;
}
}
else NewKey++;
long NewVal = EachPair.Value + pCost;
if (CurrDP.ContainsKey(NewKey)) {
if (CurrDP[NewKey] <= NewVal) {
return;
}
}
CurrDP[NewKey] = NewVal;
};
if (CharArr[I] == '(') {
UpdateAct(')', CostArr[I]);
UpdateAct('(', 0);
}
if (CharArr[I] == ')') {
UpdateAct('(', CostArr[I]);
UpdateAct(')', 0);
}
}
PrevDP = CurrDP;
}
Console.WriteLine(PrevDP[0]);
}
}
aketijyuuzou