題目型別dp
題目意思
給出乙個最長 100 的括號序列 問最長配對的括號子串行的長度是多少
括號的合法匹配有 () 和 兩種
例如 ((())) 最長是 6 而 [((]) 最長是 2
解題方法
記憶化搜尋
#include #include #include using namespace std;
char str[110];
int dp[110][110];
int dfs(int l, int r)
if(dp[l][r] != -1) return dp[l][r]; // 如果這段序列之前已經搜尋過直接返回
for( int i=l; i<=r; i++ )
if(str[r] != ')' && str[r] != ']') dp[l][r] = max(dp[l][r], dfs(l, r-1));
else
} if(dp[l][r] == -1) dp[l][r] = 0;
return dp[l][r];
}int main()
return 0;
}
poj2955解題報告
解題思路 找出最少需要多少個括號來匹配,然後再拿總長度減去最少需要匹配的括號數 轉移方式有兩種 第一種 形如s形如 s1 或者 s1 則d s min d s d s1 第二種 s至少有兩個字元的時候可以分成ab兩個子串,則d s d a d b 但需要注意的是,不管是否滿足第一條,都要嘗試第二條,...
poj2955(括號匹配DP)
題意 給乙個由 四種字元任意排列組成的字串,求最長合法的不連續字串的長度。思路 dp的時候有點倍增的意思,算出來以每個位置開始任意長度內的答案。倍增著算,注意計算一段的時候先判斷兩頭是否可以匹配,然後再列舉分界點來繼續鬆弛。關鍵給的字串不超過100,資料太弱了 n 3 的複雜度。include in...
POJ 2955 (dp括號匹配)
題意 給出一行字串,裡面有 四種括號,求出有多少個已經匹配好的括號。思路 區間dp 我們把dp i j 表示從i到j裡面有多少已經配好的括號,那麼我們假如知道了 i 到 j 區間的最大匹配,那麼i 1到 j 1區間的就可以很簡單的得到。那麼 假如第 i 個和第 j 個是一對匹配的括號那麼dp i j...