zoukankan      html  css  js  c++  java
  • 2014携程预赛第一场B 括号匹配 (DP)

    题意:给你一个含有'(' ,')' ,'[',']',四个符号的字符串,问你最少加多少个符号才能使得括号匹配.

    解题思路:DP,DP[i][j]表示i-j最少需要多少个括号才能匹配,一级一级的DP,就可以得出答案..

    ps:不想吐嘈黑书115页那个错误代码了

    解题代码:

     1 #include<vector>
     2 #include<list>
     3 #include<map>
     4 #include<set>
     5 #include<deque>
     6 #include<stack>
     7 #include<bitset>
     8 #include<algorithm>
     9 #include<functional>
    10 #include<numeric>
    11 #include<utility>
    12 #include<sstream>
    13 #include<iostream>
    14 #include<iomanip>
    15 #include<cstdio>
    16 #include<cmath>
    17 #include<cstdlib>
    18 #include<cstring>
    19 #include<ctime>
    20 #include<climits>
    21 
    22 using namespace std;
    23 int dp[200][200];
    24 int Min(int a, int b)
    25 {
    26     if(a < b)
    27         return a ;
    28     return b;
    29 }
    30 int main(){
    31 
    32     int t;
    33     scanf("%d",&t);
    34     while(t -- ){
    35       memset(dp,0,sizeof(dp));
    36       char str[200];
    37       scanf("%s",str);
    38       int n = strlen(str);
    39       for(int i = 1;i <= n;i ++)
    40           dp[i][i-1] =0 ; 
    41       for(int i = 1;i<= n;i++)
    42           dp[i][i] = 1; 
    43       for(int p = 1;p < n;p ++ ){
    44           
    45           for(int i = 0 ; i < n-p; i ++){
    46               int j = i + p;
    47               dp[i+1][j+1] = 100000;
    48               if((str[i] == '(' && str[j] == ')') || (str[i] == '[' && str[j] == ']'))
    49                 dp[i+1][j+1] = Min(dp[i+1][j+1],dp[i+2][j]);
    50               if(str[i] == '(' || str[i] == '[')
    51                 dp[i+1][j+1] = Min(dp[i+1][j+1],dp[i+2][j+1]+1);
    52               if(str[j] == ')' || str[j] == ']')
    53                 dp[i+1][j+1] = Min(dp[i+1][j+1],dp[i+1][j]+1);
    54               for(int k = i ;k <= j -1;k ++)
    55                 dp[i+1][j+1] = Min(dp[i+1][j+1],dp[i+1][k+1]+dp[k+2][j+1]);
    56           
    57           }
    58       
    59       }
    60       printf("%d
    ",dp[1][n]);
    61     }
    62 
    63     return 0;
    64 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    上机练习
    myeclipse 快捷键
    关于java classpath问题
    windows installer 出错问题解决
    hibernate 问题
    axis2 部署webservice
    webservice开发
    关于web前端开发
    软件工程工具
    计网笔记
  • 原文地址:https://www.cnblogs.com/zyue/p/3692009.html
Copyright © 2011-2022 走看看