POJ 1141 (dp括號匹配 儲存路徑)

2021-07-31 23:46:38 字數 770 閱讀 6151

題意:

給出乙個字串,求出怎麼最少新增括號才能使其完全匹配。

思路:

之前我們知道怎麼求出原本存在的括號匹配的數目,dp[i][j]是記錄從i到j的最大匹配

數,並且能用乙個二維陣列pos[i][j]儲存dp[i][j]從**分開才能得到最大的匹配數目

利用儲存的pos,dfs實現輸出。這個dfs厲害了,想不到還能這樣玩。

#include 

#include

#include

using

namespace

std;

const

int maxn = 120;

int n;

char s[maxn];

int dp[maxn][maxn]; //表示i到j最多有多少原來直接可以配皮的括號

int pos[maxn][maxn]; //表示i到j從**分開使得括號匹配所需最少

void show(int i,int j)

else

else

}}int main()

for(int k = i;k < j; k++) }}

}show(0,len-1);

printf("\n");

}return

0;}

poj1141(括號匹配 區間dp)

題意 給乙個括號序列,問包含此序列的最短合法括號序列 解法 普通的區間dp,num i j 記錄的是i j子串行最少需要補充的括號個數,只是在要記錄區間的最優分界點rem i j 從而將最短合法括號序列輸出,複雜度o n 3 include include include using namespa...

POJ 1141 括號區間DP

1.題目鏈結。其實這個題目就是一般的區間dp,不過感覺輸出還是需要一點技巧的。2.dp i j 表示區間 i,j 需要加的括號的最小的數量,那就分為兩種情況討論,s i 與s j 匹配的時候,s i 與s j 不匹配的時候。匹配的時候直接就是有dp i 1 j 1 轉移而來,不匹配的時候,列舉中間點...

poj2955(括號匹配DP)

題意 給乙個由 四種字元任意排列組成的字串,求最長合法的不連續字串的長度。思路 dp的時候有點倍增的意思,算出來以每個位置開始任意長度內的答案。倍增著算,注意計算一段的時候先判斷兩頭是否可以匹配,然後再列舉分界點來繼續鬆弛。關鍵給的字串不超過100,資料太弱了 n 3 的複雜度。include in...