NYOJ15 括號匹配 二 區間DP

2021-09-07 11:32:43 字數 948 閱讀 5834

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. (i <= k <= j);

dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);

迴圈時, 遍歷區間(i...j)的起點i以及區間長度len, len從小到大依次遞增.

即迴圈找出每一段起點為i長度為len的區間的最優解, 慢慢擴大至整個區間.即終於問題的解!

#include #include #include #include #include #include #include #include #include #include #include #include #include #define cl(x,v); memset(x,v,sizeof(x));

#define inf 1<<29

#pragma comment(linker, "/stack:1024000000,1024000000")

using namespace std;

const int n = 100 + 10;

int dp[n][n];

char str[n];

int match(char ch1, char ch2)

int main()

}cout << dp[0][length - 1] << endl;

}return 0;

}

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

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

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

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

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

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