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 }

     

     

     

     

     

  • 相关阅读:
    Ubuntu 12.04下PostgreSQL-9.1安装与配置详解(在线安装) [转]
    network error:software caused connection abort
    MySQL数据库SQL修改数据规范
    常见的动物单词汇总
    PHP观察者模式
    PHP单例模式
    PHP工厂模式
    PHP面试准备
    Let Encrypt延期(转自虞大胆的叽叽喳喳)
    全球最昂贵的域名和国内著名的域名交易
  • 原文地址:https://www.cnblogs.com/A-FM/p/5418714.html
Copyright © 2011-2022 走看看