UVA 1626 - Brackets sequence 区间DP
来源:互联网 发布:java全栈工程师是什么 编辑:程序博客网 时间:2024/05/22 06:06
题目:点击打开链接
题意:给你一个字符串,问至少添加多少个字符才能使它成为合法字符,具体的要求见题目,这道题在刘汝佳《算法竞赛入门经典第二版》278页有详细介绍
分析:我就不瞎扯了,书上写的很详细啊,需要注意的是输入串有可能是空串,用gets()接受一行字符串
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int n,d[105][105];char s[105];bool match(char a,char b){ if((a=='['&&b==']')||(a=='('&&b==')')) return 1; return 0;}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; }}int main(){ int T; scanf("%d",&T); getchar(); while(T--){ gets(s); gets(s); n = strlen(s); if(n==0){ printf("\n"); if(T>0) printf("\n"); continue; } dp(); print(0,n-1); printf("\n"); if(T>0) printf("\n"); } return 0;}
0 0
- UVA 1626 - Brackets sequence 区间DP
- uva-1626 Brackets sequence 区间dp
- UVA 1626 Brackets sequence 区间DP
- POJ 1141 / UVa 1626 Brackets Sequence (区间DP&打印路径)
- UVa 1626:Brackets Sequence(DP)
- uva 1626 - Brackets sequence dp(区间,坑题, 难度适中,难ac)
- ★Uva 1626 && POJ 1141 Brackets sequence 详细题解(区间DP+递归打印)
- poj1141 Brackets Sequence 区间dp
- ZOJ1463:Brackets Sequence(区间DP)
- POJ1141 Brackets Sequence 区间DP
- pku1141 Brackets Sequence 区间DP
- poj1141 Brackets Sequence--区间dp
- Brackets Sequence (区间dp)
- Uva-1626-Brackets sequence
- UVA 1626 - Brackets sequence
- UVa 1626 Brackets sequence
- uva 1626 - Brackets sequence
- UVA-1626Brackets sequence
- 语法 fgets函数原理初探
- poj1258 prim最小生成树
- CentOS配置nginx1.8.0
- C++ 排序函数 sort(),qsort()的用法
- 将viewControllerA加载到viewControllerB中,同时将A设置为B中tableView的header
- UVA 1626 - Brackets sequence 区间DP
- 一个小操作提高QQ邮箱订阅文章收藏2秒钟
- 通过双重for循环来找到JSON中不重复的数据
- learning git
- C++文件处理
- Java学习路线图,专为新手定制的Java学习计划建议
- 从man说起
- POJ 2187 Beauty Contest
- cin详解