博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
括号匹配(二) -- 经典动态规划
阅读量:7166 次
发布时间:2019-06-29

本文共 1260 字,大约阅读时间需要 4 分钟。

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

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

 

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

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
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 相差 m40 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\n",dp[0][length-1]);50 }51 return 0;52 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/A-FM/p/5418714.html

你可能感兴趣的文章
nullptr和NULL
查看>>
使用Spring+MySql实现读写分离(一)关于windows下安装mysql5.6
查看>>
2018-12-24:企业微信分享功能
查看>>
消息队列的使用
查看>>
Linux通配符与特殊符号知识大全汇总
查看>>
用生成器来改写直接返回列表的函数
查看>>
自动化部署mysql主从复制集群_MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现...
查看>>
mysql 多对多映射_MyBatis中多对多关系的映射和查询
查看>>
连接到多台mysql_Oracle通过dblink连接到多台MySQL
查看>>
hive sql和mysql的区别_【数据库】HIVE SQL与SQL的区别
查看>>
mysql innodb ibd_MySQL表结构为InnoDB类型从ibd文件恢复数据
查看>>
mysql数据库提供了几种复合数据类型_mysql数据库索引的几种类型及操作方法
查看>>
在mysql中如何修改字段类型_MySQL怎么修改字段类型?
查看>>
mysql中介机制_MySQL了解知识点
查看>>
mysql基本吃增删改查语句_Mysql基本语句——增删改查
查看>>
python网课笔记_《OpenCV图像处理(Python)》网课笔记(从5到8)
查看>>
Chaos网络库(二)- Buffer的设计(转载cppthinker.com)
查看>>
OpenMPI
查看>>
Android模拟器上模拟GPS
查看>>
【OpenCV】选择ROI区域
查看>>