zoukankan      html  css  js  c++  java
  • 【区间dp】B001_AW_括号匹配(匹配和不匹配)

    输入格式
    输入仅一行,为字符串 BE。
    输出格式
    输出仅一个整数,表示增加的最少字符数。
    数据范围
    对于所有输入字符串,其长度小于100。

    输入样例:
    [])
    输出样例:
    1
    

    方法一:dp

    f[l][r] 表示使得s[l:r]成为匹配字符串的最下添加个数

    • 思考状态转移方程
      • f[l][r]=min(f[l][r], f[l+1][r-1],if (s[l]==s[r])
      • f[l][r]=min(f[l][r], f[l][i]+f[i+1][r]),whatever
    #include<bits/stdc++.h>
    using namespace std;
    const int inf=0x3f3f3f3f, N=105;
    int f[N][N];
    char s[N];
    
    bool chk(int l, int r) {
        return (s[l]=='[' && s[r]==']') || (s[l]=='(' && s[r]==')';
    }
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        scanf("%s", s+1); int n = strlen(s+1);
        for (int len=1; len<=n; len++)
        for (int l=1; l+len-1<=n; l++) {
            int r=l+len-1;
            if (len==1) f[l][r]=1;
            else {
                f[l][r]=inf;
                if (chk(l,r)) f[l][r]=min(f[l][r], f[l+1][r-1]);
                for (int i=l; i<=r; i++) {
                    f[l][r]=min(f[l][r], f[l][i]+f[i+1][r]);
                }
            }
        }
        cout << f[1][n];
        return 0;
    }
    

    复杂度分析

    • Time\(O(n^3)\)
    • Space\(O(n^2)\)
  • 相关阅读:
    Unity中的Path对应各平台中的Path
    C#里的装箱、装箱和值类型、引用类型
    unity3D自适应分辨率
    python中的-m参数
    手动安装python包
    python生成器
    HDU 1312 Red and Black(bfs)
    HDU 2553 N皇后问题(dfs)
    HDU1043 Eight(BFS)
    UVa230 Borrowers (STL)
  • 原文地址:https://www.cnblogs.com/wdt1/p/13637066.html
Copyright © 2011-2022 走看看