題意: 給定乙個字串,看是否括號匹配,不匹配加括號,加最少的括號使得匹配。輸出該結果。
分析: 解題思路和切木棍很類似。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 usingview codenamespace
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;
}
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還能列印路徑...