poj2955,開始學習區間dp了

2021-07-11 11:09:11 字數 820 閱讀 9711

題目大意:給出乙個括號序列,求出其中匹配的括號數

((())) 

6()()()  6

—(]) 4

—)[)(  0

([)  6—

第一步:確定狀態

—dp[i][j]表示a[i]……a[j]的串中,有多少個已經匹配的括號

—第二步:確定狀態轉移方程 —

如果a[i]

與a[k]

是匹配的 —

dp[i

][j]= max(dp[

i][j], dp[

i+ 1][k - 1] + dp[k + 1][j] + 2) —

(相當於是將i到

j分成[***xx

]***xx

兩部分) —

否則dp[

i][j] =max(dp[i][j],dp[

i+1][j]) —

(將第乙個元素去掉

——因為它肯定不能算) —

邊界dp[i][

i] = 0.

—如果用遞推的話,應該是區間大小由小到大遞增作為最外層迴圈

#include#include#includeusing namespace std;

int dp[105][105];

char a[105];

bool check(int i,int j)

int main()}}

}printf("%d\n",dp[1][len]);

gets(a+1);

}return 0;

}

POJ 2955 括號匹配,區間DP

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

poj2955 括號匹配,區間dp

題目大意 給乙個由,組成的字串,其中 可以匹配,求最大匹配數 題解 區間dp dp i j 表示區間 i,j 中的最大匹配數 初始狀態 dp i i 1 i,i 1可以匹配 2 0 狀態轉移見 include include include include include include using...

poj2955(括號匹配DP)

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