• poj 2955 Brackets


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

    思路:括号匹配问题,求出所给序列中最长的可以匹配的长度(中间可以存在不匹配的)例如[(])]有[()]符合条件,长度为4

    dp[i][j]代表从区间i到区间j所匹配的括号的最大个数,首先,假设不匹配,那么dp[i][j]=dp[i+1][j];然后查找i+1~~j有木有与第i个括号匹配的

    有的话,dp[i][j]=max(dp[i][j],dp[i+1][k-1]+dp[k][j]+2).....

     1 #include<cstdio>  
     2 #include<iostream>  
     3 #include<algorithm>
     4 #include<math.h> 
     5 #include<string.h>  
     6 #include<vector> 
     7 #include<queue>
     8 #include<iterator>
     9 #include<vector>
    10 #include<set>
    11 #define dinf 0x3f3f3f3f
    12 typedef long long ll;
    13 
    14 using namespace std;
    15 
    16 char s[105];
    17 int dp[105][105];
    18 
    19 int main()
    20 {
    21     while(scanf("%s",s+1) && s[1]!='e')
    22     {    
    23         s[0]=2;  //以下3行注意顺序 
    24         int len=strlen(s);
    25         len--;
    26         memset(dp,0,sizeof(dp));
    27         for(int i=len-1;i>=1;i--)
    28         {
    29             for(int j=i+1;j<=len;j++)
    30             {
    31                 dp[i][j]=dp[i+1][j];
    32                 for(int k=i+1;k<=j;k++)
    33                     if((s[i]=='(' && s[k]==')') || (s[i]=='[' && s[k]==']'))
    34                         dp[i][j]=max(dp[i][j],dp[i+1][k-1]+dp[k][j]+2);
    35             }
    36         }
    37         printf("%d
    ",dp[1][len]);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    Beacon技术是什么?
    exclude kernel or other packages from getting updated
    (OK) running CORE & docker on Fedora 23 server
    (OK) dnf
    (OK) dnf
    rpm
    dnf
    dnf install -y kernel-4.2.3-300.fc23
    paper4—Multi-MPE_Trigger_Algorithm—testing
    paper4—Multi-MPE_Trigger_Algorithm
  • 原文地址:https://www.cnblogs.com/pter/p/5726149.html
Copyright © 2020-2023  润新知