dp uva1626 括号序列
来源:互联网 发布:淘宝奢侈品 编辑:程序博客网 时间:2024/05/17 00:58
题目链接
状态转移
d(i,j)表示子串S[i~j]至少需要加几个括号
递推写法 快
#include <bits/stdc++.h>using namespace std;const int maxn = 100+5;char S[maxn];int n,d[maxn][maxn];bool match(char a, char b){return (a=='(' && b==')') || (a=='[' && b==']');}void dp(){for(int i=0; i<n; i++){d[i+1][i] = 0;d[i][i] = 1;}for(int i=n-2; i>=0; i--)for(int j=i+1; j<n; j++){d[i][j] = n;if(match(S[i],S[j])) d[i][j] = min(d[i][j],d[i+1][j-1]);for(int k=i; k<j; k++){d[i][j] = min(d[i][j],d[i][k]+d[k+1][j]);}}}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(match(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;}} }void readline(char* S){fgets(S,maxn,stdin);}int main(){int T;readline(S);sscanf(S,"%d",&T);readline(S);while(T--){readline(S);n = strlen(S)-1;memset(d,-1,sizeof(d));dp();print(0,n-1);printf("\n");if(T) printf("\n");readline(S);}}
记忆化搜索 慢
#include <bits/stdc++.h>using namespace std;const int maxn = 100+5;char S[maxn];int n,d[maxn][maxn];bool match(char a, char b){return (a=='(' && b==')') || (a=='[' && b==']');}int dp(int i,int j){if(i > j) return 0;if(i==j) return 1;if(d[i][j]>=0) return d[i][j];d[i][j] = n;if(match(S[i],S[j])) d[i][j] = min(d[i][j],dp(i+1,j-1));for(int k=i; k<j; k++)d[i][j] = min(d[i][j],dp(i,k)+dp(k+1,j));return d[i][j];}void print(int i,int j){if(i > j) return;if(i==j){if(S[i]=='(' || S[i]==')') printf("()");else printf("[]");return; }int ans = dp(i,j);if(match(S[i],S[j]) && ans==dp(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 == dp(i,k)+dp(k+1,j)){print(i,k);print(k+1,j);return;}}void readline(char* S) { fgets(S, maxn, stdin);}int main() { int T; readline(S); sscanf(S, "%d", &T); readline(S); while(T--) { readline(S); n = strlen(S) - 1; memset(d, -1, sizeof(d)); print(0, n-1); printf("\n"); if(T) printf("\n"); readline(S); } return 0;}
0 0
- dp uva1626 括号序列
- 区间DP(括号序列,uva1626)
- uva1626 括号序列
- [UVa1626]括号序列
- #UVA1626#Brackets sequence(括号序列---石子归并类Dp)
- 例题9-10 括号序列 UVa1626
- NYOJ15 - UVA1626 括号匹配问题(区间dp)
- NYOJ15 - UVA1626 括号匹配问题(dp)
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
- poj1141 括号序列 dp
- 括号序列 区间DP
- Uva1626 线性DP
- UVA1626 简单DP
- UVA1626 DP经典
- [UVA1626]Brackets sequence(dp)
- 【区间dp】括号序列再战猪猪侠
- 3295: 括号序列 -(序列DP)
- uva1626
- svn主干和分支的切换
- ShareSDK第三方平台的详细使用参考官方API
- 论文阅读 - 《Neural Sentiment Classification with User and Product Attention》
- 欢迎使用CSDN-markdown编辑器
- Post/重定向/Get模式
- dp uva1626 括号序列
- uva 493
- leetcode 19. Remove Nth Node From End of List 单向链表删除第n个数
- 股票数据API整理
- 【JDK源码阅读8-util】Map接口----HashMap
- springmvc-Model和ModelAndView的区别
- 表单异步提交
- [leetcode]223. Rectangle Area
- 用 SQLite 和 FMDB 替代 Core Data