zoukankan      html  css  js  c++  java
  • poj 1141 动态规划进行括号匹配

    思路:黑书的例题

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define Maxn 1010
    using namespace std;
    int dp[Maxn][Maxn],v[Maxn][Maxn];
    char str[Maxn];
    void Out(int s,int e)
    {
        if(s>e)
            return ;
        if(s==e)
        {
            if(str[s-1]=='('||str[s-1]==')')
                printf("()");
            else
                printf("[]");
            return ;
        }
        if(v[s][e]==-1)
        {
            printf("%c",str[s-1]);
            Out(s+1,e-1);
            printf("%c",str[e-1]);
            return ;
        }
        Out(s,v[s][e]);
        Out(v[s][e]+1,e);
    }
    int main()
    {
        int n,i,j,t,k;
        memset(dp,48,sizeof(dp));
        memset(v,-1,sizeof(v));
        scanf("%s",str);
        n=strlen(str);
        for(i=0;i<=n;i++)
            dp[i][i]=1,dp[i][i-1]=0;
        for(i=1;i<=n;i++)
            for(j=i-1;j>=1;j--){
            if(str[i-1]==')'&&str[j-1]=='('||str[i-1]==']'&&str[j-1]=='[')
            {
                if(dp[i-1][j+1]<dp[i][j])
                    dp[i][j]=dp[i-1][j+1],v[j][i]=-1;
            }
            else
            {
                if(dp[i-1][j]<dp[i][j+1])
                    dp[i][j]=dp[i-1][j]+1,v[j][i]=i-1;
                else
                    dp[i][j]=dp[i][j+1]+1,v[j][i]=j;
            }
            for(k=j;k<i;k++)
            {
                if(dp[i][k+1]+dp[k][j]<dp[i][j])
                    dp[i][j]=dp[i][k+1]+dp[k][j],v[j][i]=k;
            }
        }
        Out(1,n);
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    odoo action方法
    linux命令
    删除方法odoo
    odoo权限
    odoo方法
    odoo自动更新表中数据
    odoo
    odoo之recoed.append()方法
    odoo明细表汇总数据
    假期周进度报告1
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3270461.html
Copyright © 2011-2022 走看看