【URAL 1183】Brackets Sequence(区间DP+路径记录)
来源:互联网 发布:nginx检查配置文件 编辑:程序博客网 时间:2024/06/06 11:43
【URAL 1183】Brackets Sequence(区间DP+路径记录)
题目大意:定义合法的匹配括号不可交叉。
问将给出的括号串变为合法匹配至少需要添加多少括号,输出转换出的合法匹配括号串。
只问最少添加数量用区间DP可以搞。
然后要输出的话,在DP过程中记录一下匹配情况就好。然后递归输出
代码如下:
#include <iostream>#include <cmath>#include <vector>#include <cstdlib>#include <cstdio>#include <climits>#include <ctime>#include <cstring>#include <queue>#include <stack>#include <list>#include <algorithm>#include <map>#include <set>#define LL long long#define Pr pair<int,int>#define fread(ch) freopen(ch,"r",stdin)#define fwrite(ch) freopen(ch,"w",stdout)using namespace std;const int INF = 0x3f3f3f3f;const int msz = 10000;const int mod = 1e9+7;const double eps = 1e-8;const int maxn = 123;char str[maxn];int dp[2][maxn][maxn];void prt(int l,int r){ if(l > r) return; if(dp[1][l][r] == -1) { if(str[l] == '(' || str[l] == ')') printf("()"); else printf("[]"); prt(l+1,r); } else { putchar(str[l]); prt(l+1,dp[1][l][r]-1); putchar(str[dp[1][l][r]]); prt(dp[1][l][r]+1,r); }}int main(){ //fread(""); //fwrite(""); int n; scanf("%s",str); n = strlen(str); memset(dp,0,sizeof(dp)); for(int len = 1; len <= n; ++len) { for(int i = 0,j = i+len-1; j < n; ++i,++j) { dp[0][i][j] = dp[0][i+1][j]+1; dp[1][i][j] = -1; for(int k = i+1; k <= j; ++k) { if((str[i] == '(' && str[k] == ')') || (str[i] == '[' && str[k] == ']')) if(dp[0][i][j] > dp[0][i+1][k-1]+dp[0][k+1][j]) { dp[0][i][j] = dp[0][i+1][k-1]+dp[0][k+1][j]; dp[1][i][j] = k; } } } } prt(0,n-1); return 0;}
0 0
- 【URAL 1183】Brackets Sequence(区间DP+路径记录)
- URAL 1183.Brackets Sequence ( DP+记录路径)
- poj1141 Brackets Sequence(区间dp记录路径问题)
- POJ 1141 Brackets Sequence(区间DP记录路径)
- POJ 1141Brackets Sequence (区间dp记录路径)
- Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
- poj 1141 Brackets Sequence 【区间DP+路径记录】
- POJ 1141 Brackets Sequence (区间dp 记录路径)
- poj 1141 Brackets Sequence(区间DP记录路径)
- ural1183&&poj1141 Brackets Sequence(区间DP+记录路径)
- Brackets Sequence (区间dp)
- ural Brackets Sequence (dp)
- poj 1141 Brackets Sequence(区间DP+路径打印)
- POJ--1141--Brackets Sequence--记录DP路径
- 【算法设计与数据结构】URAL 1183.Brackets Sequence(区间dp求解)
- POJ 1142 Brackets Sequence(区间dp,记录路径,还原括号匹配)
- POJ 1141 Brackets Sequence(区间DP)
- POJ 1141 Brackets Sequence (区间DP)
- C++中一个由编译器决定结果的程序
- HDU4251 The Famous ICPC Team Again (主席树)
- [IOS 开发] iOS音频篇:使用AVPlayer播放网络音乐
- Linux内核分配内存的方式
- JAVA中对象的序列化
- 【URAL 1183】Brackets Sequence(区间DP+路径记录)
- N的阶乘
- iOS开发之CLPlacemark属性一览(定位编码与反编码相关)
- 初品符号常量
- codeforces723D Lakes in Berland 搜索
- nmap系列之telnet
- As Easy As Possible
- mysql sql_mode 解决数据库非空无默认值依然可以插入的问题
- SpringMVC的各种参数绑定方式