zoukankan      html  css  js  c++  java
  • 括号匹配(二) -- 经典动态规划

    这里的括号匹配 , 如果两个相同的话   就执行下面的  语句 

    if(cmp(str[i],str[j]))  
                        dp[i][j] = min(dp[i][j],dp[i+1][j-1]);

    每次确定  从 i 到 j 的需要填补的 括号的时候  就默认  这个 值是  105

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<limits.h>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<vector>
     9 #include<set>
    10 #include<stack>
    11 #include<string>
    12 #include<sstream>
    13 #include<map>
    14 #include<cctype>
    15 using namespace std;
    16 int dp[105][105];
    17 bool cmp(int n,int m)
    18 {
    19     if((n == '('&&m == ')')||(n == '['&&m == ']'))
    20         return true;
    21     return false;
    22 }
    23 int main(void)
    24 { 
    25     int n,m,i,j,k;
    26     char str[101];
    27     scanf("%d",&n);
    28     while(n--)
    29     {
    30         scanf("%s",str);
    31         int length = strlen(str);
    32         memset(dp,0,sizeof(dp));
    33         for(i = 0; i < length; i++)
    34             dp[i][i] = 1;
    35         for(m = 1; m < length; m++)           //  先  让中间只相差一个数字  去计算一次
    36         {
    37             for(i = 0; i < length - m; i++)
    38             {
    39                 j = i + m;              // j 和 i  相差 m
    40                 dp[i][j] = 105;             // 默认  i 和 j 之间需要105个 括号去 填充
    41                 if(cmp(str[i],str[j]))                        //  看看   i  和 j 是否配套  
    42                     dp[i][j] = min(dp[i][j],dp[i+1][j-1]);       //   配套的话 就从上次 和 
    43                 for(k = i; k < j; k++)
    44                 {
    45                    dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]);
    46                 }
    47             }
    48         }
    49         printf("%d
    ",dp[0][length-1]);
    50     }
    51     return 0;
    52 }

     

     

     

     

     

  • 相关阅读:
    Nginx源码编译安装
    nginx版本对比
    k8s中subpath挂载单个文件报错处理
    C++ array 数组函数
    洛谷 P2141
    c++ set容器
    字符串中输出每一个元素的方法
    string中的pop_back()函数
    如何去掉前导0 在字符串中 算法
    pat 乙级1074
  • 原文地址:https://www.cnblogs.com/A-FM/p/5418714.html
Copyright © 2011-2022 走看看