括号序列
2016-04-10 12:16
323 查看
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; char que[101]; bool cal[101][101]; int len,dps[101][101]; void dfs(int i,int j) { if(cal[i][j])return; if(i>j)return; if(i==j){ dps[i][j]=1; return; } if((que[i]=='('&&que[j]==')')||(que[i]=='['&&que[j]==']')){ dfs(i+1,j-1); dps[i][j]=dps[i+1][j-1]; } if((que[i]=='('&&que[j]!=')')||(que[i]=='['&&que[j]!=']')){ dfs(i+1,j); dps[i][j]=min(dps[i][j],dps[i+1][j]+1); } if((que[i]!='('&&que[j]==')')||(que[i]!='['&&que[j]==']')){ dfs(i,j-1); dps[i][j]=min(dps[i][j],dps[i][j-1]+1); } for(int k=i;k<j;k++){ dfs(i,k); dfs(k+1,j); dps[i][j]=min(dps[i][j],dps[i][k]+dps[k+1][j]); } cal[i][j]=true; } int main() { scanf("%s",que); len=strlen(que); memset(cal,false,sizeof(cal)); memset(dps,0x7f,sizeof(dps)); dfs(0,len-1); printf("%d\n",dps[0][len-1]); return 0; }
相关文章推荐
- 输出集合{1,2,...,n}的所有子集
- Android 网络编程之---HttpClient 与 HttpURLConnection 共用cookie
- 【hihocoder1290 微软2016校园招聘4月在线笔试C】【二维DP】 Demo Day 机器人遇到障碍向右走向下走 最少调整数使得左上角走到右下角
- 乘积最大
- 阻塞队列中的安全中断
- 乘积最大
- 渗透神器Kali安装使用手册中文版
- eclipse引入jar包后没有整合到一个文件夹而是全部在根目录下显示怎么解决?
- eclipse引入jar包后没有整合到一个文件夹而是全部在根目录下显示怎么解决?
- Java中的函数
- 文件查找之locate、whereis与find
- hello,road of linux!
- jstl标签库的引入方式
- 2013山东省第四届ACM省赛 Contest Print Server
- HDU 5661 Claris and XOR 贪心
- ubuntu下update-rc.d的具体用法
- 请教ip routing指令与no switchport区别?
- 开源后端云Parse是什么?
- 装箱问题
- 装箱问题