zoukankan      html  css  js  c++  java
  • 括号匹配

    poj 2955

    http://poj.org/problem?id=2955

    题目大意:找到数量最多的完全匹配的括号        ‘[’与‘]'匹配,'('与')'匹配

    区间dp

    定义dp[i][j]为从i到j数量最多的完全匹配的括号

    当 str[i]=='[' && str[j]==']' 或 str[i]=='(' && str[j]==')' 时  dp[i][j]=dp[i+1][j-1]+2;

    代码

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N=110;
    char str[N]; 
    int dp[N][N];
    int main()
    {
        while(~scanf("%s",str+1))
        {
            if(str[1]=='e') break;
            memset(dp,0,sizeof(dp));
            int ans=-1;
            int len=strlen(str+1);
            for(int v=1;v<=len;v++)
                for(int i=1;i+v-1<=len;i++)
                {
                    int j=i+v-1;
                    if((str[i]=='['&&str[j]==']')||(str[i]=='('&&str[j]==')'))
                        dp[i][j]=dp[i+1][j-1]+2;
                    for(int k=i;k<j;k++)
                        dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]);
                    ans=max(ans,dp[i][j]);
                }
            printf("%d
    ",ans);
        }
        return 0;
     } 

    变式:括号匹配2

    只需要括号总数减去最大完全匹配括号数即可

    代码

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N=110;
    char str[N]; 
    int dp[N][N];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%s",str+1);
            memset(dp,0,sizeof(dp));
            int ans=-1;
            int len=strlen(str+1);
            for(int v=1;v<=len;v++)
                for(int i=1;i+v-1<=len;i++)
                {
                    int j=i+v-1;
                    if((str[i]=='['&&str[j]==']')||(str[i]=='('&&str[j]==')'))
                        dp[i][j]=dp[i+1][j-1]+2;
                    for(int k=i;k<j;k++)
                        dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]);
                    ans=max(ans,dp[i][j]);
                }
            printf("%d
    ",len-ans);
        }
        return 0;
     } 
  • 相关阅读:
    UVa 128 Software CRC
    UVa 11258 String Partition(简单DP)
    POJ 3070 Fibonacci(矩阵乘法logN)
    UVa 10280 Old Wine Into New Bottles(剪枝+完全背包)
    图论笔记第四章 欧拉图与哈密尔顿图(beta.)考点
    图。。珍藏season
    图论及其应用哈密尔顿图(alpha)
    9.保健…todo
    android 移植笔记有感
    unp_exam_要点.doc
  • 原文地址:https://www.cnblogs.com/greengenius/p/9231825.html
Copyright © 2011-2022 走看看