UVA 1626 括号序列
2018-01-24 12:12
405 查看
题目描述:https://vjudge.net/problem/UVA-1626
设串S至少需要增加d(S)个括号,转移如下:
如果S形如(S′)或者[S′],转移到d(S′)。
如果S至少有两个字符,则可以分成AB,转移到d( A )+d(B)。
边界是:S为空时d(S)=0,S为单字符时d(S)=1。注意(S′, [S′, ) S′之类全部属于第二种转移,不需要单独处理。
注意:不管S是否满足第一条,都要尝试第二种转移,否则“[][]”会转移到“][”,然后就只能加两个括号了。
设串S至少需要增加d(S)个括号,转移如下:
如果S形如(S′)或者[S′],转移到d(S′)。
如果S至少有两个字符,则可以分成AB,转移到d( A )+d(B)。
边界是:S为空时d(S)=0,S为单字符时d(S)=1。注意(S′, [S′, ) S′之类全部属于第二种转移,不需要单独处理。
注意:不管S是否满足第一条,都要尝试第二种转移,否则“[][]”会转移到“][”,然后就只能加两个括号了。
#include<iostream> using namespace std; #include<algorithm> #include<stdio.h> #include<string.h> #define maxl 100+10 char s[maxl]; int d[maxl][maxl]; int len=0; void fun() { for(int i=1;i<=len;i++) { d[i][i]=1; for(int j=1;j<i;j++) d[i][j]=0; } for(int i=len-1;i>=1;i--) { for(int j=i+1;j<=len;j++) { int tmp=len; if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']')) tmp=min(tmp,d[i+1][j-1]); for(int k=i;k<j;k++) tmp=min(tmp,d[i][k]+d[k+1][j]); d[i][j]=tmp; } } } void print(int i,int j) { if(i>j)return; if(i==j) { if(s[i]=='('||s[i]==')')printf("()"); else printf("[]"); return; } int ans=d[i][j]; if(((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']'))&&ans==d[i+1][j-1]){ printf("%c",s[i]);print(i+1,j-1);printf("%c",s[j]);return; } for(int k=i;k<j;k++) { if(ans==d[i][k]+d[k+1][j]) { print(i,k);print(k+1,j);return; } } } int main() { int n;scanf("%d",&n);getchar(); while(n--){ getchar(); gets(s+1); len=strlen(s+1); for(int i=1;i<=len;i++) for(int j=1;j<=len;j++) d[i][j]=0; fun(); if(len)print(1,len); puts(""); if(n)putchar('\n'); } return 0; }
相关文章推荐
- uva 1626 括号序列
- dp uva1626 括号序列
- (mark)UVA-1626 括号序列,转移方程很有意思
- UVa 1626 括号序列——区间DP
- [UVa1626]括号序列
- 区间DP(括号序列,uva1626)
- uva1626 括号序列
- UVa 1626 括号序列(矩阵连乘)
- 例题9-10 括号序列 UVa1626
- UVA 1626 括号序列(区间dp)
- Uva 1626,括号序列
- 括号序列(uva 1626)
- NYOJ15 - UVA1626 括号匹配问题(区间dp)
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
- UVA 1626 Brackets sequence(括号匹配 + 区间DP)
- uva 1626 添加最少的括号使得括号匹配
- NYOJ15 - UVA1626 括号匹配问题(dp)
- ***UVa-1626 Brackets sequence ACM解题报告(巧妙地递推+打印)经典的括号 dp题
- uva 1626(动态规划起步第五天 LIS变形 括号匹配)
- Parenthesis UVALive - 4882 删除不必要的括号序列,模拟题 + 数据