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

本文共 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

你可能感兴趣的文章
DBCP连接池
查看>>
4.2 time & datetime 模块
查看>>
m4-第四次考试
查看>>
基于NiosII的TRDB-LTM控制器IP核的设计
查看>>
Skia引擎API整理介绍
查看>>
C++项目參考解答:求Fibonacci数列
查看>>
程序猿们_一二三四线城市你更愿意选择去哪里工作?
查看>>
OO_JML系列_单元总结
查看>>
python file operations
查看>>
spring的注入
查看>>
优秀网站汇总
查看>>
unity注意事项
查看>>
Java虚拟机 运行时数据区
查看>>
windows环境隐藏命令行窗口运行Flask项目
查看>>
拦截导弹 (NYOJ—79) 最长字串问题 (NYOJ—17)
查看>>
Canvas
查看>>
排版定位
查看>>
神经网络理论与工程实战-知识积累
查看>>
洛谷 P1198 [JSOI2008]最大数
查看>>
Anaconda使用记录
查看>>