zoukankan      html  css  js  c++  java
  • POJ2955Brackets——dp

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

    1.考虑区间。

    2.当前区间可为自己子区间的和(题意果然是和而非最大值)。

    3.考虑当前区间的边界。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int d[105][105],len;
    bool v[105][105];
    char s[105];
    void dfs(int i,int j)
    {
        if(v[i][j])return;
        v[i][j]=1;
        if(i==j)return;
        if(i+1==j)
        {
            if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']'))
                d[i][j]=2;
            return;
        }
        for(int k=i;k<j;k++)
        {
            dfs(i,k);dfs(k+1,j);
            d[i][j]=max(d[i][j],d[i][k]+d[k+1][j]);
        }
        if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']'))
        {
            dfs(i+1,j-1);
            d[i][j]=max(d[i][j],d[i+1][j-1]+2);
        }
    }
    int main()
    {
        while(1)
        {
            gets(s);
            if(s[0]=='e')return 0;
            len=strlen(s);
            dfs(0,len-1);
            printf("%d
    ",d[0][len-1]);
            memset(v,0,sizeof v);
            memset(d,0,sizeof d);
        }
    }
  • 相关阅读:
    分布式消息系统Kafka初步
    webService 学习
    一个周末掌握IT前沿技术之node.js篇
    mount
    dd
    fsck
    resize2fs
    mkfs
    parted
    tune2fs
  • 原文地址:https://www.cnblogs.com/Narh/p/8444322.html
Copyright © 2011-2022 走看看