括号匹配(二) -- 经典动态规划

摘要:
这里的括号匹配,如果两个相同的话就执行下面的语句if(cmp(str[i],str[j]))dp[i][j]=min(dp[i][j],dp[i+1][j-1]);每次确定从i到j的需要填补的括号的时候就默认这个值是1051#include2#include3#include4#include5#include˂limits

括号匹配(二) -- 经典动态规划第1张

这里的括号匹配 , 如果两个相同的话 就执行下面的 语句
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 namespacestd;
16 int dp[105][105];
17 bool cmp(int n,intm)
18 {
19     if((n == '('&&m == ')')||(n == '['&&m == ']'))
20         return true;
21     return false;
22 }
23 int main(void)
24 { 
25     intn,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 }

免责声明:文章转载自《括号匹配(二) -- 经典动态规划》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件IOS自动化测试之AirTest下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java:双括号初始化 /匿名内部类初始化法

偶然见到一种初始化方式,感到十分新奇: //新建一个列表并赋初值A、B、C ArrayList<String> list = new ArrayList<String>() {{ add("A"); add("B"); add("C"); }};...

Oracle(安装PLSQL、注册、配置环境变量)

1、PLSQL安装 (1)双击plsqldev1000.exe后点击确定:  (2)选择路径(路径不能带有括号、空格、汉字): (3)下一步:  (4)finish:  (5)close:  (6)桌面生成图标:  (7) 双击图标后点击取消:  (8)进入主界面后要进行注册:  (9)点击注册:  (10)tools下的preferen...

动态规划解决01背包问题

一、问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 二、总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现; 三、动态规划的原理及过程: eg:numb...

关于方括号和尖括号的区别

经常我们会看到命令说明中包含一些方括号"[ ]","< >",一直都没有怎么搞清楚这两个的区别,这两天学习monkey,才算普及到了这个知识,这里做个简单的记录,方便闲来无事的时候查看。 方括号:表示可选参数 尖括号:表示必填参数 举例:adb shell monkey [option] <count> 基本命令格式 尖括号...

牛客网2017校招真题在线编程之合唱团问题——动态规划问题首秀

先贴题目 题目描述 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数...

电子邮件的正则表达式

看似是电子邮件的正则表达式之一w+([- +.]w)*@w+([-.]w+)*.w+([-.]w+)*或者S+@S+.S+都是常用的电子邮件正则表达式RegularExpressionValidator就不用解释了,基础控件,验证输入是否符合[…...] 匹配括号中任何一字符[^…...] 匹配不在括号中的任何一字符w 匹配(a~z,A~Z,0~9)W 匹...