NYOJ 15 括號匹配(二)區間dp

2021-07-11 13:06:32 字數 962 閱讀 8005

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:6 描述

給你乙個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。

如:是匹配的

()是匹配的

((]是不匹配的

([)]是不匹配的

輸入第一行輸入乙個正整數n,表示測試資料組數(n<=10)

每組測試資料都只有一行,是乙個字串s,s中只包含以上所說的四種字元,s的長度不超過100

輸出對於每組測試資料都輸出乙個正整數,表示最少需要新增的括號的數量。每組測試輸出佔一行

樣例輸入

4

()((]

([)]

樣例輸出

0

03

//也是初學dp,說一下自己對這道題的理解吧,首先設f(i,j)為第i位到第j位所需要的最少括號數,那麼有以下兩種情況:

1.第i位與第j位匹配,那麼就有f(i,j)=min(f(i,j),f(i+1,j-1));即f(i,j)就等於第i+1位到第j-1位所需要的最少括號數; 

2.第i位與第j位不匹配,那麼就有 f(i,j)=min(f(i,j),f(i,j-1)+1);即f(i,j)就等於第i位到第j-1位所需要的最少括號數加1; 

其次就是尋找f(i,j)當前狀態下的最優解,即:f(i,j)=min(f(i,j), f(i,k)+f(k+1,j)); 

//測試資料執行後,dp陣列情況: 

程式**:

#include#includeint dp[110][110];

int min(int a,int b){return a

NYOJ 15 括號匹配(二) 區間DP

括號匹配 二 時間限制 1000 ms 記憶體限制 65535 kb 難度 6 描述給你乙個字串,裡面只包含 四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。如 是匹配的 是匹配的 是不匹配的 是不匹配的 輸入第一行輸入乙個正整數n,表示測試資料組數 n 10 每組測試資料都只有一行,...

NYOJ15 括號匹配(二)(區間dp)

時間限制 1000 ms 記憶體限制 65535 kb 難度 6 描述 給你乙個字串,裡面只包含 四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。如 是匹配的 是匹配的 是不匹配的 是不匹配的 輸入第一行輸入乙個正整數n,表示測試資料組數 n 10 每組測試資料都只有一行,是乙個字串s...

NYOJ15 括號匹配 二 區間DP

pid 15 dp i j 表示從i到j至少須要加入多少個括號才幹滿足匹配條件.初始化 if i j dp i j 1 else dp i j inf 狀態轉移 當i j時 if match str i str j dp i j min dp i j d i 1 j 1 然後切割區間,找最優切割點k...