题意:给出一个括号序列,问最短的补全成合法括号序列是什么。

解法:区间dp。考虑dp[i][j]表示i到j区间补全需要的多余字符个数,则有状态转移方程:dp[i][j] = min{dp[i][k], dp[k + 1][j]},0 <= k < j,if(s[i]s[j] == '()' or '[]') dp[i][j] = min(dp[i][j], dp[i - 1][j - 1])。第一个方程意义为区间i到j的代价是区间i到k加区间k+1到j,枚举k,获得最优解,第二个方程意义为当s[i]和s[j]是一对匹配的括号的时候dp[i][j]就可以等于dp[i -1][j - 1],这两种情况取min。因为要输出的是补全之后的字符串,所以要记录每次的选择,递归回去输出。

PS:不要多组输入!不要多组输入!不要多组输入!别问我怎么知道的……

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<iomanip>
#define LL long long
using namespace std;
int ans[105][105];//记录选择,如果是-1说明选择是第二种情况,否则表示第一种情况的k
string s;
void dfs(int l, int r)
{if(l > r) return ;if(l == r){if(s[l] == '(' || s[l] == ')')printf("()");else printf("[]");return ;}if(ans[l][r] == -1){printf("%c", s[l]);dfs(l + 1, r - 1);printf("%c", s[r]);}else{dfs(l, ans[l][r]);dfs(ans[l][r] + 1, r);}
}
int main()
{cin >> s;int dp[105][105] = {0};for(int i = 0; i < 105; i++)for(int j = i; j < 105; j++)dp[i][j] = 1000000000;for(int i = 0; i < s.size(); i++)dp[i][i] = 1;for(int j = 0; j < s.size(); j++)for(int i = j - 1; i >= 0; i--){if(s[i] == '(' && s[j] == ')' || s[i] == '[' && s[j] == ']')//第二种情况{dp[i][j] = dp[i + 1][j - 1];ans[i][j] = -1;}for(int k = i; k < j; k++)//第一种情况{if(dp[i][j] > dp[i][k] + dp[k + 1][j]){dp[i][j] = dp[i][k] + dp[k + 1][j];ans[i][j] = k;}}}dfs(0, s.size() - 1);puts("");return 0;
}

  

转载于:https://www.cnblogs.com/Apro/p/4871452.html

POJ 1141 Brackets Sequence相关推荐

  1. POJ 1141 Brackets Sequence(动态规划)

    题目大意 给你一个括号串(包括'(',')','[',']'),长度不超过 100,问你怎么添加最少的括号,使得这个括号串是合法的,输出添加括号后的合法括号串 做法分析 以长度划分阶段,定义状态:f[ ...

  2. POJ 1141 Brackets Sequence

    括号序列,刘汝佳黑书上的经典例题.但是这道题要输出我们最后得到的添加括号最少的序列, 输出序列确实很麻烦,参考了题解,才勉勉强强写出来,以后还得把这道题敲一遍. /*Accepted 288K 32M ...

  3. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  4. UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)

    整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...

  5. COJ-1271 Brackets Sequence

    斌牛出的校赛题 1271: Brackets Sequence Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 92  Solved: 36 [Subm ...

  6. UVA1626 / ZOJ1463 Brackets sequence 区间DP

    简单区间DP (有空串... ...) Brackets sequence Time Limit: 4500MS   Memory Limit: Unknown   64bit IO Format:  ...

  7. uva 1626 - Brackets sequence

    // // main.cpp // uva 1626 - Brackets sequence/*这一题应该是经典的矩阵类似问题.显然 需要使用两个变量来表示最终的结果.设 dp[i][j]表示第i个位 ...

  8. POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]

    http://poj.org/problem?id=2778 题意:给一些只由ACGT组成的模式串,问有多少种长度为n且不含有给出的模式串的DNA序列. 自动机的状态转换可以看成一个有向图(有重边的) ...

  9. POJ 2955 Brackets(括号匹配一)

    题目链接:http://poj.org/problem?id=2955 题目大意:给你一串字符串,求最大的括号匹配数. 解题思路: 设dp[i][j]是[i,j]的最大括号匹配对数. 则得到状态转移方 ...

  10. [POJ 3709] K-Anonymous Sequence(斜率优化dp / 动态维护凸包)

    K-Anonymous Sequence 看了两年前自己的博客,真的好青涩,连 markdown 都不太会用. 确实观赏感不是很好. 学习真的是慢慢积累的过程,以前感觉理解很困难的事,随着知识的增长, ...

最新文章

  1. 安装mysql 10055_Can’t connect to MySQL server on ‘localhost’ (10055) | 学步园
  2. Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(2)RPD资料档案库创建
  3. CRM product ID format相关配置
  4. SharePoint中的权限体系
  5. Spring4.x(16)--SpringEL-正则表达式
  6. HAproxy + keepalived 实现双机热备
  7. 漫画:如何给女朋友解释什么是适配器模式?
  8. 菜鸟笔记 -- Chapter 6.4.2 详解继承
  9. FireFly编辑器调用C语言,grasshopper的插件FireFly 萤火虫
  10. oracle 启动报错03113,oracle数据库无法启动,总报ora-03113错误
  11. 南昌工程学院c语言试题,南昌工程学院概率论与数理统计试题库部分题目
  12. 输出希腊字母表(JAVA实验)
  13. WindowsMobile配置英文ROM显示中文问题(解决程序中文乱码)
  14. kali下钓鱼网站的制作
  15. XIO: fatal IO error 25 (Inappropriate ioctl for device) on X server “localhost:13.0“
  16. HBuilder表单提交php出现内部服务器错误
  17. 关于子网划分、子网聚合(超网)的研究
  18. 网易考拉Android客户端网络模块设计
  19. Modbus 协议从站开发通信西门子 PLC
  20. cdc有哪些rapper_cdc说唱会馆成员介绍

热门文章

  1. early stopping softmax批量梯度下降(BGD)手动实现
  2. param.requires_grad = False
  3. 图卷积网络详细介绍(二)
  4. R-CNN学习笔记3:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
  5. PCL编程笔记——Assertion `px != 0' failed.
  6. distributeed 1.21.8 requires msgpack,which is not installed 分布式1.21.8需要msgpack,未安装
  7. pytorch 存取模型(待补充)
  8. cropbox php,jQuery用户头像裁剪插件cropbox.js使用详解
  9. java redis源码分析,慢谈 Redis 实现分布式锁 以及 Redisson 源码解析
  10. mysql存储数据到cephfs_1.4 cephfs挂载