Uva 1626,括號序列

2022-04-01 07:47:52 字數 684 閱讀 9560

題意: 給定乙個字串,看是否括號匹配,不匹配加括號,加最少的括號使得匹配。輸出該結果。

分析: 解題思路和切木棍很類似。d(i,j) i ~ j 要加最少多少括號,他一定等於: 分兩種情況,一:[s'],(s'),d(i,j) = d(i+1,j-1);二: d(i,j) = min(d(i,k),d(k+1,j));

注意: 輸入有空行。

#include using

namespace

std;

const

int maxn = 100+5

;char

s[maxn];

intn,d[maxn][maxn];

bool match(char a,char

b)void readline(char *s)

int dp(int i,int

j)

return

ans;

}void print(int i,int

j)

int ans =dp(i,j);

if(match(s[i],s[j])&&ans==dp(i+1,j-1

))

for(int k=i; k)

}}int

main()

return0;

}

view code

uva 1626 括號序列

這道題目是劉汝佳演算法入門中的一道動態規劃題目。要求新增最少括號得到乙個規則序列。先來看看它的狀態轉移,稍有複雜。邊界條件就是s為空是d s 為0,s位單字元時d s 1。另外需要注意的就是不管s是否進行第一種轉移,都要嘗試第二種轉移。include include include include ...

UVA 1626括號序列DP

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

區間DP(括號序列,uva1626)

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