uva 1626 Brackets Sequence ❀(动态规划)
2014-08-14 15:49
288 查看
状态表示方法:d[ i ][ j ]表示的是一条序列的开始和结束;
状态定义:d[ i ][ j ]表示字串s[ i~j ] 需要添加的数量。
对本题来说,这是一道关于括号匹配的题目。关于括号匹配的题目很多,又用栈来实现的,也有想这道题一样,要动规来记录状态实现的。
状态不好定义不好想,状态转移也不好定义不好想,但是,哪有那么多不好想呢。
不会就学不懂就研究,你学会了做过了不就记住了么
状态定义:d[ i ][ j ]表示字串s[ i~j ] 需要添加的数量。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n; char s[105]; int d[105][105]; bool match(char ch1,char ch2) { if((ch1=='['&&ch2==']')||(ch1=='(')&&ch2==')') return true; return false; } 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[j]==')') 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(); for(int kase=1;kase<=t;kase++) { gets(s); gets(s); n = strlen(s); if(n==0){ printf("\n"); if(kase!=t) printf("\n"); continue; } dp(); print(0,n-1); printf("\n"); if(kase!=t) printf("\n"); } return 0; }
对本题来说,这是一道关于括号匹配的题目。关于括号匹配的题目很多,又用栈来实现的,也有想这道题一样,要动规来记录状态实现的。
状态不好定义不好想,状态转移也不好定义不好想,但是,哪有那么多不好想呢。
不会就学不懂就研究,你学会了做过了不就记住了么
相关文章推荐
- uva 1626(动态规划起步第五天 LIS变形 括号匹配)
- 【UVA】1626-Brackets sequence(动态规划)
- UVa11730 - Number Transformation(欧拉筛选法、动态规划)
- [UvaLive 6756] Increasing Shortest Path [动态规划]
- 黑客的攻击 Hacker‘s crackdown UVA11825 状态压缩动态规划
- UVA10534[Wavio Sequence] 动态规划 LIS
- UVALive - 4764 bing it——动态规划
- UVA 1626 Brackets sequence——dp
- UVA-11584 Partitioning by Palindromes 动态规划 回文串的最少个数
- uva 1626 添加最少的括号使得括号匹配
- UVa 147 Dollars 动态规划状态转移方程分析
- Brackets sequence UVA - 1626 区间dp
- UVA1424----Salesmen----动态规划
- UVA - 1626 Brackets sequence ( dp )
- 【UVA】10739 - String to Palindrome(动态规划)
- UVA 1626(p278)----Brackets Sequence
- UVA - 437 The Tower of Babylon (动态规划)
- 100道动态规划11——UVA 10817 Headmaster's Headache 刷表法 小小的位运算
- ***UVa-1626 Brackets sequence ACM解题报告(巧妙地递推+打印)经典的括号 dp题
- Team them up! UVA - 1627(动态规划+好题)