uva 1626 添加最少的括号使得括号匹配 桃扇骨 2022-08-03 13:42 75阅读 0赞 添加最少的括号使得括号匹配,并将括号匹配后的结果输出,可能有空串,所以输入的时候要用gets(); #include<map> #include<vector> #include<cstdio> #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<stack> #include<queue> #include<set> #define inf 0x3f3f3f3f #define mem(a,x) memset(a,x,sizeof(a)) using namespace std; typedef long long ll; typedef pair<int,int> pii; inline int in() { int res=0;char c; while((c=getchar())<'0' || c>'9'); while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res; } char a[111]; int dp[111][111]; int c[111][111];//记录从哪里断开 bool match(char a,char b) { if(a=='(' && b==')')return 1; if(a=='[' && b==']')return 1; return 0; } void print(int i,int j) { if(i>j)return; if(i==j) { if(a[i]=='(' || a[i]==')')putchar('('),putchar(')'); else putchar('['),putchar(']'); } else { if(c[i][j]>=0) { print(i,c[i][j]); print(c[i][j]+1,j); } else { if(a[i]=='(') { putchar('('); print(i+1,j-1); putchar(')'); } else { putchar('['); print(i+1,j-1); putchar(']'); } } } } int main() { int T=in(); while(T--) { gets(a);//开始有个空行 gets(a); mem(c,-1); int n=strlen(a); if(n==0)//处理空串 { puts(""); if(T)puts(""); continue; } for(int i=0;i<n;i++) { dp[i][i]=1; } for(int len=2;len<=n;len++)//枚举括号的长度 { for(int i=0;i+len<=n;i++)//枚举括号开始的位置i { int j=i+len-1; //结束位置 dp[i][j]=dp[i][i]+dp[i+1][j]; //初始化 c[i][j]=i; for(int k=i+1;k<=j-1;k++) //从子结构中选择最小的 { if(dp[i][j]>dp[i][k]+dp[k+1][j]) { dp[i][j]=dp[i][k]+dp[k+1][j]; c[i][j]=k; //从k处断开 } } if(match(a[i],a[j])) //如果i跟j匹配 dp[i][j]=min(dp[i+1][j-1],dp[i][j]); { if(i+1==j)dp[i][j]=0,c[i][j]=-1; else if(dp[i][j]>dp[i+1][j-1]) { dp[i][j]=dp[i+1][j-1]; c[i][j]=-1; } } } } print(0,n-1); puts(""); if(T)puts(""); } return 0; }
相关 UVA 1626 括号序列(区间dp) 分析:区间dp,装填方程:dp(i,j)=min(dp(i,k)+dp(k+1,j)) 其中(i<=k<j) dp(i,j)表示从第i个字符到第j个字符的最小需要添加括号字符的 Myth丶恋晨/ 2024年02月17日 19:36/ 0 赞/ 72 阅读
相关 uva 1626 添加最少的括号使得括号匹配 添加最少的括号使得括号匹配,并将括号匹配后的结果输出,可能有空串,所以输入的时候要用gets(); include<map> include< 桃扇骨/ 2022年08月03日 13:42/ 0 赞/ 76 阅读
相关 括号匹配 <table style="width:1615px; margin-bottom:20px; background-color:transparent"> <tbody> 秒速五厘米/ 2022年06月02日 08:53/ 0 赞/ 253 阅读
相关 括号匹配 [题目 括号匹配][Link 1] 一般的括号匹配问题是这样的: 给出一个字符串,判断这个括号匹配是不是合法的括号匹配。如”((” 和 “())”都不是合法的括号匹配 我会带着你远行/ 2022年05月18日 00:55/ 0 赞/ 207 阅读
相关 括号匹配 栈的应用,括号匹配。 经典做法是,遇左括号压入,遇右括号判断,和栈顶配对就继续,不配对或者栈空就错了。最后判断是否为空。 代码有些麻烦。 我是遇左括号压对应的右括号,最后 你的名字/ 2022年05月06日 06:28/ 0 赞/ 255 阅读
相关 括号匹配 题目描述 假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“\[”和“\]”和花括号“\{”和“\}”,且这三种括号可按任意的次序嵌套使用(如:…\ ╰半橙微兮°/ 2022年03月30日 02:28/ 0 赞/ 288 阅读
相关 括号匹配 PTA 02:括号匹配 一、题目 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,\[ \],\{ \} 冷不防/ 2022年02月27日 15:54/ 0 赞/ 340 阅读
相关 括号匹配 <table> <tbody> <tr> <td colspan="3"> <h2>括号匹配</h2> </td> </tr> <tr> 约定不等于承诺〃/ 2022年01月07日 04:37/ 0 赞/ 327 阅读
相关 括号匹配 include<stdio.h> include<stack> using namespace std; stack <int> s;//定义一 叁歲伎倆/ 2021年12月01日 17:44/ 0 赞/ 324 阅读
相关 括号匹配 括号配对问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行 怼烎@/ 2021年09月22日 07:20/ 0 赞/ 411 阅读
还没有评论,来说两句吧...