Brackets Sequence (POJ-1141)
来源:互联网 发布:shell脚本编程教程 编辑:程序博客网 时间:2024/05/17 21:15
Description
Let us define a regular brackets sequence in the following way:
1. Empty sequence is a regular sequence.
2. If S is a regular sequence, then (S) and [S] are both regular sequences.
3. If A and B are regular sequences, then AB is a regular sequence.
For example, all of the following sequences of characters are regular brackets sequences:
(), [], (()), ([]), ()[], ()[()]
And all of the following character sequences are not:
(, [, ), )(, ([)], ([(]
Some sequence of characters '(', ')', '[', and ']' is given. You are to find the shortest possible regular brackets sequence, that contains the given character sequence as a subsequence. Here, a string a1 a2 ... an is called a subsequence of the string b1 b2 ... bm, if there exist such indices 1 = i1 < i2 < ... < in = m, that aj = bij for all 1 = j = n.
1. Empty sequence is a regular sequence.
2. If S is a regular sequence, then (S) and [S] are both regular sequences.
3. If A and B are regular sequences, then AB is a regular sequence.
For example, all of the following sequences of characters are regular brackets sequences:
(), [], (()), ([]), ()[], ()[()]
And all of the following character sequences are not:
(, [, ), )(, ([)], ([(]
Some sequence of characters '(', ')', '[', and ']' is given. You are to find the shortest possible regular brackets sequence, that contains the given character sequence as a subsequence. Here, a string a1 a2 ... an is called a subsequence of the string b1 b2 ... bm, if there exist such indices 1 = i1 < i2 < ... < in = m, that aj = bij for all 1 = j = n.
Input
The input file contains at most 100 brackets (characters '(', ')', '[' and ']') that are situated on a single line without any other characters among them.
Output
Write to the output file a single line that contains some regular brackets sequence that has the minimal possible length and contains the given sequence as a subsequence.
Sample Input
([(]
Sample Output
()[()]
题意:给你一行括号,只有小括号()和中括号【】,令其匹配好,即左括号一定有个右括号匹配,然后把最短的匹配好的括号输出;
思路:区域DP,但是比较难的地方是输出,用pos把需要添加的地方记录下来,然后二分查找输出;
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define INF 0x3f3f3f3fusing namespace std;int f[105][105],pos[105][105];char s[105];void fun(int x,int y){ if(x>y) return; if(x==y){ if(s[x]=='('||s[x]==')') printf("()"); if(s[x]=='['||s[x]==']') printf("[]"); } else if(x<y){ if(pos[x][y]==-1){ if(s[x]=='('){ printf("("); fun(x+1,y-1); printf(")"); } else{ printf("["); fun(x+1,y-1); printf("]"); } } else{ fun(x,pos[x][y]); fun(pos[x][y]+1,y); } }}int main(){ scanf("%s",s); memset(f,0,sizeof(f)); int len=strlen(s); for(int i=len;i>0;i--){ s[i]=s[i-1]; f[i][i]=1; } for(int l=1;l<=len;l++){ for(int i=1;i<=len-l;i++){ int j=l+i; f[i][j]=INF; if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']'){ if(f[i+1][j-1]<f[i][j]) f[i][j]=f[i+1][j-1]; } pos[i][j]=-1; for(int k=i;k<j;k++){ if(f[i][k]+f[k+1][j]<f[i][j]){ f[i][j]=f[i][k]+f[k+1][j]; pos[i][j]=k; } } } } fun(1,len); printf("\n"); return 0;}
阅读全文
1 0
- Brackets Sequence (poj 1141)
- Brackets Sequence (POJ-1141)
- POJ 1141 Brackets Sequence
- POJ 1141 Brackets Sequence
- Brackets Sequence--poj--1141
- poj 1141 Brackets Sequence
- poj 1141 Brackets Sequence
- POJ 1141 Brackets Sequence
- POJ 1141 Brackets Sequence
- poj 1141 Brackets Sequence
- POJ 1141 Brackets Sequence
- POJ 1141 Brackets Sequence
- poj 1141(Brackets Sequence)
- poj 1141 brackets sequence
- poj 1141 Brackets Sequence
- POJ 1141 Brackets Sequence
- poj 1141 Brackets Sequence
- poj 1141 brackets sequence
- HDU2049(51/600)
- 开源软件ownCloud学习
- Eva's Balance
- 后台服务上传头像
- 【翻译】【Ionic】上传,FileTransfer学习
- Brackets Sequence (POJ-1141)
- 使用Ajax和Jquery配合数据库实现下拉框的二级联动
- spark 运行内存异常及参数调整
- SpringBoot快速入门,简单样例
- 获取ContentProvider来获取手机所有的联系人及联系人信息
- gradle linux 绝对路径
- android UiAutomator长按实现控制按住控件时间的方法
- HDU 3714 Error Curves(三分)
- Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别