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\n",dp[1][n]);
61     }
62 
63     return 0;
64 }
View Code

 

转载于:https://www.cnblogs.com/zyue/p/3692009.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值