括號序列的最小代價

2021-08-10 10:42:25 字數 1033 閱讀 5007

這裡有乙個關於合法的括號序列的問題。

如果插入「+」和「1」到乙個括號序列,我們能得到乙個正確的數學表示式,我們就認為這個括號序列是合法的。例如,序列"(())()","()"和"(()(()))"是合法的,但是")(", "(()"和"(()))("是不合法的。我們這有一種僅由「(」,「)」和「?」組成的括號序列,你必須將「?」替換成括號,從而得到乙個合法的括號序列。

對於每個「?」,將它替換成「(」和「)」的代價已經給出,在所有可能的變化中,你需要選擇最小的代價。

input

第一行是乙個非空的偶數長度的字串,它僅由「(」,「)」和「?」組成。它的長度不大於 50000。接著是m行,m是字串中「?」的個數。每一行包含兩個整數 ai和bi ( 1<=ai,bi<=1000000), ai是將第i個「?」替換成左括號的代價, bi是將第i個「?」替換成右括號的代價。
output

在一行中輸出合法的括號序列的最小代價。

如果沒有答案,輸出-1。

input示例

(??)

1 22 8

output示例

4#include #include #include #include using namespace std;  

typedef long long int ll;

const int maxn = 50050;

char input[maxn];

ll a[maxn], b[maxn];

int main()

} priority_queue, greater> q;

ll sum = 0;

ll pos = 0;

for (int i = 0; i < len; i++)

else if (input[i] == ')')

else

if (sum < 0)

else

}} if (sum != 0)

else

return 0;

}

最小代價樹

題目 描述以下方法稱為最小代價的字母樹 給定一正整數序列,例如 4,1,2,3,在不改變量的位置的條件下把它們相加,並且用括號來標記每一次加法所得到的和。例如 4 1 2 3 5 5 10。除去原數不4,1,2,3之外,其餘都為中間結果,如5,5,10,將中間結果相加,得到 5 5 10 20,那麼...

最小編輯代價

對於兩個字串a和b,我們需要進行插入 刪除和修改操作將a串變為b串,定義c0,c1,c2分別為三種操作的代價,請設計乙個高效演算法,求出將a串變為b串所需要的最少代價。給定兩個字串a和b,及它們的長度和三種操作代價,請返回將a串變為b串所需要的最小代價。保證兩串長度均小於等於300,且三種代價值均小...

最小編輯代價

給定兩個字串str1和str2,再給定三個整數ic,dc和rc,分別代表插入 刪除和替換乙個字元的代價,請輸出將str1編輯成str2的最小代價。輸出三行,第一行和第二行均為一行字串,分別表示兩個字串str1,str2。left 1 leq length str1 length str2 leq 5...