题目意思就是输入一串括号,让你找到最小的补偿数目使括号串合法,并且输出补全后的串。

  基本是区间DP的模板题,该题特别让你输出补全后的答案。这和区间dp的反向思路很像,就是把一个大的区间划分为多个互不干扰的区间来输出。划分到需要补充的点时,就直接补充。

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<stdio.h>
  4. #include<string.h>
  5. using namespace std;
  6. int n,k,s,dp[][];
  7. char a[];
  8. const long long LNF = 0x3f3f3f3f3f3f;
  9. bool pd(int i,int j)//判断a[i]和a[j]是否为一对括号
  10. {
  11. if(a[i]=='('&&a[j]==')') return true;
  12. if(a[i]=='['&&a[j]==']') return true;
  13. return false;
  14. }
  15. void pr(int i,int j)//输出区间[i,j]的补全版本
  16. {
  17. if(i>j) return;
  18. if(i==j) //递归到了一个点上时,直接输出补全后的一对括号
  19. {
  20. if(a[i]=='('||a[i]==')') printf("()");
  21. else printf("[]");
  22. return;
  23. }
  24. int m=dp[i][j];
  25. if(pd(i,j)&&m==dp[i+][j-]) //如果成立,意味着a[i]和a[j]是一对匹配的括号
  26. {
  27. printf("%c",a[i]);
  28. pr(i+,j-);
  29. printf("%c",a[j]);
  30. return;
  31. }
  32. for(int k=i;k<j;k++)
  33. {
  34. if(m==dp[i][k]+dp[k+][j])
  35. {
  36. pr(i,k);
  37. pr(k+,j);
  38. return ;//满足条件就代表找到了一个分割点,可以划分成两个独立区间的输出。
  39. }
  40. }
  41. }
  42. int main()
  43. {
  44. while(gets(a))
  45. {
  46. int n=strlen(a);
  47. memset(dp,LNF,sizeof(dp));
  48. for(int i=;i<n;i++) dp[i][i]=,dp[i+][i]=; //单个符号需要补一个括号才能补全 无符号则本身就合法
  49. for(int i=n-;i>=;i--) //从后往前更新,保证每次遍历只修改之前的状态一次
  50. for(int j=i+;j<=n-;j++)
  51. {
  52. dp[i][j]=LNF;
  53. if(pd(i,j)) dp[i][j]=dp[i+][j-];
  54. for(int k=i;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+][j]);
  55. // cout<<dp[i][j]<<endl;
  56. }
  57. pr(,n-);
  58. printf("\n");
  59.  
  60. }
  61. }

POJ1141 Brackets Sequence---区间DP+输出路径的更多相关文章

  1. POJ 1141 Brackets Sequence(区间DP, DP打印路径)

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  2. poj 1141 Brackets Sequence 区间dp,分块记录

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35049   Accepted: 101 ...

  3. [原]POJ1141 Brackets Sequence (dp动态规划,递归)

    本文出自:http://blog.csdn.net/svitter 原题:http://poj.org/problem?id=1141 题意:输出添加括号最少,并且使其匹配的串. 题解: dp [ i ...

  4. UVA 1626 Brackets sequence 区间DP

    题意:给定一个括号序列,将它变成匹配的括号序列,可能多种答案任意输出一组即可.注意:输入可能是空串. 思路:D[i][j]表示区间[i, j]至少需要匹配的括号数,转移方程D[i][j] = min( ...

  5. Ural 1183 Brackets Sequence(区间DP+记忆化搜索)

    题目地址:Ural 1183 最终把这题给A了.. .拖拉了好长时间,.. 自己想还是想不出来,正好紫书上有这题. d[i][j]为输入序列从下标i到下标j最少须要加多少括号才干成为合法序列.0< ...

  6. poj 1141 Brackets Sequence (区间dp)

    题目链接:http://poj.org/problem?id=1141 题解:求已知子串最短的括号完备的全序列 代码: #include<iostream> #include<cst ...

  7. poj 1141 Brackets Sequence ( 区间dp+输出方案 )

    http://blog.csdn.net/cc_again/article/details/10169643 http://blog.csdn.net/lijiecsu/article/details ...

  8. POJ 题目1141 Brackets Sequence(区间DP记录路径)

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27793   Accepted: 788 ...

  9. ZOJ1463:Brackets Sequence(间隙DP)

    Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular seque ...

随机推荐

  1. 9、socket.io,websocket 前后端实时通信,(聊天室的实现)

    websocket 一种通信协议 ajax/jsonp 单工通信 websocket 全双工通信 性能高 速度快 2种方式: 1.前端的websocket 2.后端的 socket.io 一.后端so ...

  2. Assignments---(贪心)

    Assignments Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. P1002 过河卒

    题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...

  4. mysql数据库的主从同步,实现读写分离 g

    https://blog.csdn.net/qq_15092079/article/details/81672920 前言 1 分别在两台centos 7系统上安装mysql 5.7 2 master ...

  5. PTA地下迷宫探索

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

  6. 更新node的版本,node没有安装到c盘,安装到了D盘

    百度的很久,只有这一个实用,记录一下 https://www.cnblogs.com/xinjie-just/p/7061619.html

  7. asp.net mvc easyui tree

    1.html页面代码: <div class="easyui-panel" style="padding:5px" id="powerTree& ...

  8. 12.0-uC/OS-III任务调度

    调度器,决定了任务的运行顺序. uC/OS-III是一个可抢占的, 基于优先级的内核.根据其重要性每个任务都被分配了一个优先级.uC/OS-III支持多个任务拥有相同的优先级. 1.抢占式调度 uC/ ...

  9. 11.1-uC/OS-III就绪列表

    准备好运行的任务被放到就绪列表中, 如图6-1.就绪列表是一个数组( OSRdyList[]),它一共有OS_CFG_PRIO_MAX条记录,记录的数据类型为OS_RDY_LIST(见OS.H).就绪 ...

  10. 自动微分(AD)学习笔记

    1.自动微分(AD) 作者:李济深链接:https://www.zhihu.com/question/48356514/answer/125175491来源:知乎著作权归作者所有.商业转载请联系作者获 ...