2 条题解

  • 0
    @ 2023-7-18 8:30:47
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e3 + 5;
    int n;
    int dp[N][N], root[N][N];
    int a[N];
    string s;
    
    bool check(int l, int r)
    {
    	return ((s[l] == '(' && s[r] == ')') || (s[l] == '[' && s[r] == ']')); 
    }
    
    int main()
    {
    	memset(dp, 0x3f, sizeof(dp));
    	cin >> s;
    	int len = s.size();
    	s = " " + s;
    	for(int i = 1; i <= len; i++)
    		dp[i][i] = 1;
    	for(int i = 2; i <= len; i++)
    	{
    		for(int l = 1; l + i - 1 <= len; l++)
    		{
    			int r = i + l - 1;
    			if(l + 1 == r && check(l, r))
    				dp[l][r] = 0; 
    			if(l + 1 < r && check(l, r)) 
    				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]);	
    			}
    		}
    	}
    	cout << dp[1][len] << endl;
    	return 0; 
    }
    

    信息

    ID
    469
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    34
    已通过
    11
    上传者