poj1141(括號匹配 區間dp)

2021-06-21 11:42:04 字數 609 閱讀 2896

題意:給乙個括號序列,問包含此序列的最短合法括號序列;

解法:普通的區間dp,num[i][j]記錄的是i-j子串行最少需要補充的括號個數,只是在要記錄區間的最優分界點rem[i][j]從而將最短合法括號序列輸出,複雜度o(n^3);

**:#include #include #include using namespace std;

char s[2004];

int num[2004][2004];

int rem[2004][2004];

int len;

bool ok(char a,char b)

string ans="";

void dfs(int left,int right)

if(rem[left][right]==right)

dfs(left,rem[left][right]);

dfs(rem[left][right]+1,right);

}int main()

{ if(gets(s)==null)

return 0;

ans="";

len=strlen(s);

for(int i=0; i

POJ 1141 括號區間DP

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

poj 1141 區間dp 列印路徑

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

poj 1141(區間dp 滾動陣列)

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