• Poj 2955 Brackets (区间dp)


    题目链接:

      Poj 2955 Brackets

    题目描述:

      给出一串括号,问最大合法匹配的括号的数目是多少?

    解题思路:

      区间DP,dp[x][y]代表区间[x, y)中的最大匹配数目,然后枚举区间长度和起点。考虑一下,对于括号套括号可以由状态[x+1,y-1)转化来,括号连括号可以由[x, k) + [k, y) (x<k<y)转化来。状态转移确定下来以后就可以愉快地打码辣!

     1 #include <cmath>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <algorithm>
     6 using namespace std;
     7 typedef __int64 LL;
     8 const int maxn = 110;
     9 int dp[maxn][maxn];
    10 
    11 int main ()
    12 {
    13     char str[maxn];
    14     while (scanf ("%s", str), strcmp(str, "end"))
    15     {
    16         memset (dp, 0, sizeof(dp));
    17         int len = strlen (str);
    18 
    19         for (int i=2; i<=len; i++)
    20             for (int j=0; j+i<=len; j++)
    21             {
    22                 dp[j][j+i] = dp[j+1][j+i-1];
    23                 if (str[j] == '(' && str[j+i-1] == ')')
    24                     dp[j][j+i] ++;
    25                 if (str[j] == '[' && str[j+i-1] == ']')
    26                     dp[j][j+i] ++;
    27                 for (int k=j+1; k<=j+i; k++)
    28                     dp[j][j+i] = max (dp[j][j+i], dp[j][k]+dp[k][j+i]);
    29             }
    30         printf ("%d
    ", dp[0][len] * 2);
    31     }
    32     return 0;
    33 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    TStringList 常用操作(转自南山古陶)
    在Delphi中使用Indy控件实现邮件群发
    GSM手机SMS编码解码
    建别人进不了删不掉的文件夹
    播放 wav 文件
    delphi inherited,纯虚
    PDU编码规则
    sql函数
    基于GPRS的LED电子显示屏
    结对编程 队友代码分析
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4930155.html
Copyright © 2020-2023  润新知