UVA1626[Brackets sequence] 区间动态规划
来源:互联网 发布:爵府第一标尺源码 编辑:程序博客网 时间:2024/05/19 10:40
题目链接
题意:用最小代价使不合法的括号序列合法。
解题报告:
合法的括号序列:
空序列合法
S合法 那么 (S)或 [S] 合法
A 合法, B 合法, 那么 AB 合法
我们定义 d[i][j] 为 把 原始序列 S中 S[i]~S[j] 变为合法序列 的最小代价
那么有三种情况:
单独的一个括号 d[i][i]=1
找到 括号 S[i] 和 S[j] 匹配 dp[i][j]=min(dp[i][j], dp[i+1][j-1])
把序列分割为两份,分别找代价,再合并 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]) i<=k < j
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;char S[105];int d[105][105], n;int match(char a, char b){ return (a=='('&&b==')')||(a=='['&&b==']');}void dp(){ for ( int i=0; i<n; i++ ) d[i][i]=1, d[i+1][i]=0; 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 put(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] ); put(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] ){ put(i,k), put(k+1,j); return ; } }int main(){ int T; scanf("%d", &T); getchar(); while (T--) { gets(S); gets(S); n=strlen(S); dp(); put(0,n-1); puts(""); if (T) puts(""); } }
阅读全文
0 0
- UVA1626[Brackets sequence] 区间动态规划
- UVA1626 / ZOJ1463 Brackets sequence 区间DP
- uva1626 Brackets sequence
- UVa1626 Brackets sequence
- UVA1626 - Brackets sequence
- UVA1626 Brackets sequence
- [UVA1626]Brackets sequence(dp)
- UVa1626 Brackets sequence
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
- uva1626 poj 1141 Brackets Sequence 区间dp 打印路径
- POJ1141 ZOJ1463 Brackets Sequence 经典动态规划 区间DP
- [ACM] POJ 1141 Brackets Sequence (区间动态规划)
- ◆练习题目◆◇区间动态规划◇ Brackets Sequence
- POJ 1141 Brackets Sequence 动态规划
- 动态规划 Brackets Sequence poj 1141
- poj1141 Brackets Sequence 动态规划 输出路径
- 动态规划 Brackets Sequence poj 1141
- POJ 1141 Brackets Sequence 动态规划
- Mybatis --- 创建方法、全局配置
- iOS10.3福利 允许App运行中变更App图标
- hive安装及配置
- VS加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS
- Maven下SSM项目整合笔记00:项目简介+创建maven
- UVA1626[Brackets sequence] 区间动态规划
- jQuery.serialize() 函数详解
- Gh0st Rat
- 2017广西邀请赛 D题Covering (递推+矩阵快速幂)
- spring学习之@ModelAttribute运用详解
- Unity如何实现在球表面移动并朝向一目标点(一)
- ASP.NET session时间的设置
- chrome浏览器 两个span元素 并列一行高度不一致
- SAP ABAP AT NEW 和AT END OF的用法