括号配对
内存限制: 512 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
Hecy 又接了个新任务:BE 处理。BE 中有一类被称为 GBE。
以下是 GBE 的定义:
- 空表达式是 GBE
- 如果表达式
A
是 GBE,则[A]
与(A)
都是 GBE - 如果
A
与B
都是 GBE,那么AB
是 GBE
下面给出一个 BE,求至少添加多少字符能使这个 BE 成为 GBE。
输入格式
输入仅一行,为字符串 BE。
输出格式
输出仅一个整数,表示增加的最少字符数。
样例
样例输入
复制[])
样例输出
复制1
#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 5;
int n;
int dp[N][N];
string s;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> s;
n = s.length();
for(int i = 1; i <= n; i++) dp[i][i] = 1;
for(int len = 2; len <= n; len++) {
for(int l = 1; l <= n - len + 1; l++) {
int r = len + l - 1;
dp[l][r] = 1e9;
if((s[l - 1] == '(' && s[r - 1] == ')') || (s[l - 1] == '[' && s[r - 1] == ']')) dp[l][r] = dp[l + 1][r - 1];
for(int k = l; k < r; k++) dp[l][r] = min(dp[l][r], dp[l][k] + dp[k + 1][r]);
}
}
printf("%d", dp[1][n]);
return 0;
}
标签:GBE,int,题解,样例,cin,C++,nullptr,括号,tie
From: https://blog.csdn.net/xxy20110830/article/details/143890226