POJ 1141 括號區間DP

2021-09-20 18:47:27 字數 724 閱讀 6616

1.題目鏈結。其實這個題目就是一般的區間dp,不過感覺輸出還是需要一點技巧的。

2.dp[i][j]表示區間[i,j]需要加的括號的最小的數量,那就分為兩種情況討論,s[i]與s[j]匹配的時候,s[i]與s[j]不匹配的時候。

匹配的時候直接就是有dp[i-1][j+1]轉移而來,不匹配的時候,列舉中間點k.尋找最小值。然後這裡需要加乙個flag陣列來標記這個區間在**中斷了。flag[i][j]=k,表示區間[i,j]在k處發生了不匹配。輸出的時候,我們發現如果這個地方不匹配,就二分這個區間即可。如果這個區間內的括號是連續的,那麼就把他置為-1即可。

#include#include#include#include#includeconst int maxn = 300;

int dp[maxn][maxn];

int flag[maxn][maxn];

char s[maxn];

const int inf = 1e9;

#pragma warning(disable:4996)

int len;

void dp()

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

}} }

}void print(int i, int j)

else if (flag[i][j] == -1)

else }

int main()

}

poj1141(括號匹配 區間dp)

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

poj 1141 區間dp 列印路徑

題意 定義合法的括號序列如下 1 空序列是乙個合法的序列 2 如果s是合法的序列,則 s 和 s 也是合法的序列 3 如果a和b是合法的序列,則ab也是合法的序列 例如 下面的都是合法的括號序列 下面的都是非法的括號序列 給定乙個由 和 組成的序列,找出以該序列為子串行的最短合法序列。解題思路 這題...

poj 1141(區間dp 滾動陣列)

題意 有m個人,我們任選3個人組成乙個隊伍,可以組成c m,3 種隊伍,給出這些隊伍之間的勝率。現在,需要你戰勝n個隊伍。戰勝該隊伍,你可選擇用戰勝的隊伍來替換你現有的隊伍。現在要求戰勝這n個隊伍的最大概率。思路 因為對於戰勝的隊伍,我們可以選擇替換還是不替換,這就像01揹包。因為n非常大,我們需要...