3295 括號序列 (序列DP)

2021-08-09 08:45:07 字數 971 閱讀 4266

描述

給定一串字串,只由 「[」、「]」 、「(」、「)」四個字元構成。現在讓你盡量少的新增括號,得到乙個規則的序列。

例如:「()」、「」、「(())」、「()」、「()」、「()[()]」,都是規則的序列。這幾個不是規則的,如:「(」、「[」、「]」、「)(」、「([()」。

輸入

輸入有多組測試資料。輸入一串字串序列,長度不大於255。

輸出

輸出最少新增的括號數目。

樣例輸入

樣例輸出

題目**

椒江校區第一屆c語言程式設計大賽

這個題是問需要新增多少個括號使之成為合    法括號序列,那麼我們可以先求有多少合法    的括號匹配,然後用字串長度減去匹配的    括號數就行

狀態轉移方程主要是對於我們列舉的區間 dp[i][j],如果i和j處的括號能夠匹配,則 dp[i][j]=dp[i+1][j-1]+1

;   因為我們是從小到大列舉長度,所以小長 度 的區間一定是最優的,所以當 i 與 j 匹配 時,則是子區間的最優值+1

1/*2

3*/4 #include5 #include6 #include7 #include8

using

namespace

std;

9string

s;10

int f[500][500

];11

intmain()

25 printf("

%d\n

",f[1

][n]);26}

27return0;

28 }

夜多漫長

DP 括號匹配序列問題

簡單括號匹配問題是給出字串,判斷字串中的括號是否匹配,此類問題核心解決方案就是利用棧的後進先出的特性,從左到右依次遍歷字串,遇左括號進棧,遇右括號將其與棧頂元素配對,若能配對,則棧頂元素出棧,繼續遍歷,若不能配對,則返回false。字串遍歷結束後,判斷棧是否為空,若不為空返回false,若為空,返回...

UVA 1626括號序列DP

題目背景 我們將正規括號序列定義如下 空序列是正規括號序列。如果s是乙個正規括號序列,那麼 s 和 s 都是正規括號序列。如果a和b都是正規括號序列,那麼ab是乙個正規括號序列。例如,下面這些序列都是正規括號序列 而下面這些不是正規括號序列 題目描述 給你一些含有字元 和 的括號序列。你需要找乙個最...

區間DP(括號序列,uva1626)

發現動態規劃,記憶化搜尋,bfs之類的尋找最優解的演算法,往往會有一些尋找最優解過程中的記錄。通過觀察這些記錄,我們能尋到一些蛛絲馬跡,從而找到最優解是如何一步一步形成的。因此可以列印決策過程,或者說可以還原我們是如何一步一步找到答案的,比如列印最短路徑,又或者如此題中列印解。以前bfs還能列印路徑...