Uva-1626 lrj-P278 区间dp
来源:互联网 发布:vb.net 获取网页内容 编辑:程序博客网 时间:2024/06/03 18:55
题意:
给定一个由[,],(,),构成的字符串,给其添加这些括号使得其成为一个正规括号序列
1 空序列是正规括号序列
2 如果S是正规括号序列,那么[S]和(S)也是正规括号序列
3 如果A和B都是正规括号序列,则AB也是正规括号序列
题解:
dp[i][j]有2种转移的方式:
一种是最优矩阵链乘的转移式
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
一种是如果两端的括号匹配的话
if(match(i,j)) dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
dp的打印方式都是通过最优解的来源找到一条路径递归打印即可
打印的时候也要注意不同的转移方式
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char str[110];int dp[110][110];bool match(int a,int b){ if(str[a]=='('&&str[b]==')') return true; if(str[a]=='['&&str[b]==']') return true; return false;}void print(int a,int b){ if(a>b) return ; if(a==b){ if(str[a]=='('||str[a]==')') printf("()"); else printf("[]"); return ; } int ans=dp[a][b]; if(match(a,b)&&ans==dp[a+1][b-1]){ printf("%c",str[a]),print(a+1,b-1),printf("%c",str[b]); return ; } for(int k=a;k<b;k++){ if(ans==dp[a][k]+dp[k+1][b]){ print(a,k),print(k+1,b); return ; } }}int main(){ int T; freopen("in.txt","r",stdin); scanf("%d",&T); getchar(); while(T--) { gets(str); gets(str); int len=strlen(str); for(int i=0;i<=len;i++) dp[i+1][i]=0,dp[i][i]=1; for(int i=len-2;i>=0;i--){ for(int j=i+1;j<len;j++){ dp[i][j]=len; if(match(i,j)) dp[i][j]=min(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]); } } print(0,len-1); str[0]='\0'; puts(""); if(T) puts(""); } return 0;}
阅读全文
0 0
- Uva-1626 lrj-P278 区间dp
- uva 10003 lrj-P278 区间dp入门
- uva 1331 lrj-P279 三角剖分+区间dp
- UVA 1626(p278)----Brackets Sequence
- UVA 1626 区间DP
- uva 12186 lrj-P282 简单树形dp
- uva 1220 lrj-P282 最大独立集(树形dp)
- uva 1630 lrj-P305 字符串dp(记忆化)
- UVA 10003(p278)----CUtting Sticks
- UVA 1626 - Brackets sequence 区间DP
- uva-1626 Brackets sequence 区间dp
- UVA 1626 Brackets sequence 区间DP
- UVA 1626 括号序列(区间dp)
- UVA 10003 区间DP
- uva 1362 区间DP
- UVA 字符串区间DP
- UVA 10617 区间DP
- uva 662(区间dp)
- 测试工具--给自己备份学习
- VIN码车架号进行识别OCR录入
- Cordova开发之IOS插件开发
- 关于oracle查找重复数据
- 生活中的某一天
- Uva-1626 lrj-P278 区间dp
- 有内存限制的海量数据排序
- 华为笔试:删除字符串中出现次数最少的字符
- Android内存优化汇总
- #bzoj1506#双塔问题(Dp经典)
- C++学习15:指针与const
- vue环境搭建与创建第一个vuejs文件
- java初始化与清理
- 谈谈style属性