• 南阳理工大学oj 题目15 括号匹配(二)


    括号匹配(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:6
     
    描述
    给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
    如:
    []是匹配的
    ([])[]是匹配的
    ((]是不匹配的
    ([)]是不匹配的
     
    输入
    第一行输入一个正整数N,表示测试数据组数(N<=10)
    每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100
    输出
    对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
    样例输入
    4
    []
    ([])[]
    ((]
    ([)]
    样例输出
    0
    0
    3
    2

    动态规划:区间DP

    好久没写题目了,第一次写,有点生疏。还好是一遍过。要不然丢人了。

    区间DP经典题:

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    
    using namespace std;
    
    char a[105];
    int dp[105][105];
    int n;
    int main()
    {
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",a);
            
            for(int i=0;i<105;i++)
            {
                for(int j=0;j<105;j++)
                {
                    dp[i][j]=100000;
                    if(i==j)
                        dp[i][j]=1;
                }
            }
            int len=strlen(a);
            for(int j=1;j<len;j++)
            {
                for(int i=0;i<len&&i+j<len;i++)
                {
                    int l = i;
                    int r = i+j;
                    if((a[l]=='['&&a[r]==']')||(a[l]=='('&&a[r]==')'))
                    {
                        if(l==r-1)
                            dp[l][r]=0;
                        else
                            dp[l][r]=min(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[0][len-1]);
            
        }
        
        return 0;
    }
    
  • 相关阅读:
    python操作Redis详解
    python操作SQLAlchemy
    设计模式详解及Python实现
    计算机基础
    DRF内置过滤组件与排序组件结合使用
    LTE
    LTE
    LTE
    LTE
    LTE
  • 原文地址:https://www.cnblogs.com/dacc123/p/8393140.html
Copyright © 2020-2023  润新知