UVA 1626 Brackets sequence——dp
2018-03-13 13:28
363 查看
印象中第5遍了。。。。。。换行卡的挺严,嗯#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 200;
const int INF = 0x3f3f3f3f;
int T;
char str[maxn];
int n, dp[maxn][maxn];
bool judge(int i, int j) {
if ((str[i]=='['&&str[j]==']')||(str[i]=='('&&str[j]==')')) return true;
return false;
}
void print(int x, int y) {
if (x > y) return;
if (x == y) {
if (str[x] == '[' || str[x] == ']') printf("[]");
else if (str[x] == '(' || str[x] == ')') printf("()");
return;
}
if (judge(x, y) && dp[x][y] == dp[x+1][y-1]) {
printf("%c", str[x]);
print(x+1, y-1);
printf("%c", str[y]);
return;
}
for (int k = x; k < y; k++) {
if (dp[x][y] == dp[x][k]+dp[k+1][y]) {
print(x, k);
print(k+1, y);
return;
}
}
}
int main() {
//freopen("out.txt", "w", stdout);
scanf("%d", &T);
getchar();
for (int kase = 1; kase <= T; kase++) {
getchar();
gets(str+1);
n = strlen(str+1);
for (int i = 1; i <= n; i++) dp[i][i-1] = 0, dp[i][i] = 1;
for (int len = 2; len <= n; len++) {
for (int i = 1; i+len-1 <= n; i++) {
int j = i+len-1;
dp[i][j] = INF;
if (judge(i, j)) dp[i][j] = dp[i+1][j-1];
for (int k = i; k < j; k++) {
dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+1][j]);
}
}
}
if (kase != 1) printf("\n");
print(1, n);
printf("\n");
}
return 0;
}
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 200;
const int INF = 0x3f3f3f3f;
int T;
char str[maxn];
int n, dp[maxn][maxn];
bool judge(int i, int j) {
if ((str[i]=='['&&str[j]==']')||(str[i]=='('&&str[j]==')')) return true;
return false;
}
void print(int x, int y) {
if (x > y) return;
if (x == y) {
if (str[x] == '[' || str[x] == ']') printf("[]");
else if (str[x] == '(' || str[x] == ')') printf("()");
return;
}
if (judge(x, y) && dp[x][y] == dp[x+1][y-1]) {
printf("%c", str[x]);
print(x+1, y-1);
printf("%c", str[y]);
return;
}
for (int k = x; k < y; k++) {
if (dp[x][y] == dp[x][k]+dp[k+1][y]) {
print(x, k);
print(k+1, y);
return;
}
}
}
int main() {
//freopen("out.txt", "w", stdout);
scanf("%d", &T);
getchar();
for (int kase = 1; kase <= T; kase++) {
getchar();
gets(str+1);
n = strlen(str+1);
for (int i = 1; i <= n; i++) dp[i][i-1] = 0, dp[i][i] = 1;
for (int len = 2; len <= n; len++) {
for (int i = 1; i+len-1 <= n; i++) {
int j = i+len-1;
dp[i][j] = INF;
if (judge(i, j)) dp[i][j] = dp[i+1][j-1];
for (int k = i; k < j; k++) {
dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+1][j]);
}
}
}
if (kase != 1) printf("\n");
print(1, n);
printf("\n");
}
return 0;
}
相关文章推荐
- Brackets sequence UVA - 1626(区间dp)
- Brackets sequence UVA - 1626 (典型的区间dp+递归打印路径)
- UVA - 1626 Brackets sequence DP
- Brackets sequence UVA - 1626
- poj 1141 Brackets Sequence(区间dp)
- UVA 1626 区间DP
- Uva1626 线性DP
- UVa 1626:Brackets Sequence(DP)
- UVALive 6801 Sequence (DP)
- UVaLive 6801 Sequence (计数DP)
- Optimal Array Multiplication Sequence UVA - 348 (最优矩阵链乘+递归输出路径+区间dp)
- Brackets sequence UVA - 1626 区间dp
- POJ 1141 / UVa 1626 Brackets Sequence (区间DP&打印路径)
- UVa1626 - Brackets sequence(区间dp)
- UVA 1626 - Brackets sequence 区间DP
- UVA 10534 Wavio Sequence DP(LIS+二分)
- 区间DP(括号序列,uva1626)
- UVA-1626 Brackets sequence (简单区间DP)
- UVA 1626 Brackets sequence 区间DP
- UVA1626 DP经典