poj2955解題報告

2021-07-03 18:14:08 字數 585 閱讀 2749

解題思路:找出最少需要多少個括號來匹配,然後再拿總長度減去最少需要匹配的括號數

轉移方式有兩種:第一種:形如s形如[s1]或者(s1)則d(s)=min(d(s),d(s1))

第二種:s至少有兩個字元的時候可以分成ab兩個子串,則d(s)=d(a)+d(b);

但需要注意的是,不管是否滿足第一條,都要嘗試第二條,否則[ ] [ ]會轉移到 ] [ 只能加兩個括號了

#include#include#include#include#includeusing namespace std;

const int maxn=100+10;

const int inf=(1<<10);

string s;

int d[maxn][maxn];

bool match(char a,char b)

int main()

for(int i = n-2; i >= 0; i--)

for(int j = i+1; j < n; j++)

printf("%d\n",s.length()-d[0][n-1]);

}}

poj2955(括號匹配DP)

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

括號匹配(POJ2955)題解

題目大意 給出一串括號,求其中的最大匹配數。我這麼一說題目大意估計很多人就蒙了,其實我看到最開始的時候也是很蒙的。這裡就來解釋一下題意。這道題讓求的是最大常規匹配數,什麼是常規匹配呢?都是常規序列。翻譯一下題目的英文 我們給出了 常規括號 序列的以下歸納定義 樣例輸入 end樣例輸出 664 06現...

POJ 2955 括號匹配,區間DP

題意 給你一些括號,問匹配規則成立的括號的個數。思路 這題lrj的黑書上有,不過他求的是新增最少的括號數,是的這些括號的匹配全部成立。我想了下,其實這兩個問題是一樣的,我們可以先求出括號要匹配的最少數量,那麼設原來括號的數量為l 新增了l 那麼其實原來括號匹配成功的括號數就是 l l 2 l 2。d...