zoukankan      html  css  js  c++  java
  • POJ 2955 Brackets 区间DP

    dp[x][y]表示[x,y]里的最大匹配,如果s[x]和s[y]匹配,那么dp[x][y] = dp[x + 1][y - 1] + 2。然后对于每个区间都试图将其拆成两半。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 char s[200];
     6 int dp[200][200];
     7 int dfs(int x,int y)
     8 {
     9     if (x >= y)
    10         return 0;
    11     if (dp[x][y] != -1)
    12         return dp[x][y];
    13     if ((s[x] == '(' && s[y] == ')') || (s[x] == '[' && s[y] == ']'))
    14         dp[x][y] = dfs(x + 1,y - 1) + 2;
    15     for (int i = x;i <= y - 1;i++)
    16         dp[x][y] = max(dp[x][y],dfs(x,i) + dfs(i + 1,y));
    17     return dp[x][y];
    18 }
    19 int main()
    20 {
    21     while (scanf("%s",s + 1) > 0)
    22     {
    23         memset(dp,-1,sizeof(dp));
    24         if (s[1] == 'e')
    25             break;
    26         int len = strlen(s + 1);
    27         printf("%d
    ",dfs(1,len)); 
    28     }
    29     return 0;
    30 }
    心之所动 且就随缘去吧
  • 相关阅读:
    JSF
    filter用户例子
    分析LogFilter
    理解session
    了解xml文件
    软件工程期末项目总结
    阅《软件工程》——之感
    自我介绍
    期末课程设计《天猫后台管理系统》
    JSON
  • 原文地址:https://www.cnblogs.com/iat14/p/12008515.html
Copyright © 2011-2022 走看看