给一组小括号与中括号的序列,加入最少的字符,使该序列变为合法序列,输出该合法序列。

dp[a][b]记录a-b区间内的最小值,

mark[a][b]记录该区间的最小值怎样得到。

#include "stdio.h"
#include "string.h" int inf=99999999;
char str[110];
int dp[110][110],mark[110][110]; void pri(int l,int r)
{
if (l>r) return ;
if (l==r)
{
if(str[l]=='(' || str[r]==')') printf("()");
if(str[l]=='[' || str[r]==']') printf("[]");
return ;
} if (mark[l][r]==-1)
{
printf("%c",str[l]);
pri(l+1,r-1);
printf("%c",str[r]);
}
else
{
pri(l,mark[l][r]);
pri(mark[l][r]+1,r);
} }
int main()
{ int i,j,k,a,b,n;
while (gets(str))
{
n=strlen(str);
if (n==0)
{
printf("\n");
continue;
} for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (i>=j) dp[i][j]=0;
else dp[i][j]=inf; for (i=0;i<n;i++)
dp[i][i]=1; for (j=2;j<=n;j++)
for (i=0;i<=n-j;i++)
{
a=i;
b=i+j-1;
if (str[a]=='(' && str[b]==')')
{
dp[a][b]=dp[a+1][b-1];
mark[a][b]=-1;
}
if (str[a]=='[' && str[b]==']')
{
dp[a][b]=dp[a+1][b-1];
mark[a][b]=-1;
} for (k=a;k<b;k++)
if (dp[a][k]+dp[k+1][b]<dp[a][b])
{
dp[a][b]=dp[a][k]+dp[k+1][b];
mark[a][b]=k;
}
} pri(0,n-1);
printf("\n"); }
return 0;
}

POJ 1141 区间DP的更多相关文章

  1. poj 1141 区间dp+递归打印路径

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30383   Accepted: 871 ...

  2. POJ 1141 经典DP 轨迹打印

    又几天没写博客了,大二的生活实在好忙碌啊,开了五门专业课,每周都是实验啊实验啊实验啊....我说要本月刷够60题,但好像完不成了,也就每天1题的样子.如今写动规还是挺有条理的,包括这道需要打印轨迹,其 ...

  3. poj 3280(区间DP)

    Cheapest Palindrome Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7869   Accepted: 38 ...

  4. poj 2955 区间dp入门题

    第一道自己做出来的区间dp题,兴奋ing,虽然说这题并不难. 从后向前考虑: 状态转移方程:dp[i][j]=dp[i+1][j](i<=j<len); dp[i][j]=Max(dp[i ...

  5. POJ 2955 (区间DP)

    题目链接: http://poj.org/problem?id=2955 题目大意:括号匹配.对称的括号匹配数量+2.问最大匹配数. 解题思路: 看起来像个区间问题. DP边界:无.区间间隔为0时,默 ...

  6. POJ 1651 (区间DP)

    题目链接: http://poj.org/problem?id=1651 题目大意:加分取牌.如果一张牌左右有牌则可以取出,分数为左牌*中牌*右牌.这样最后肯定还剩2张牌.求一个取牌顺序,使得加分最少 ...

  7. poj 1390 区间dp

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5035   Accepted: 2065 Descriptio ...

  8. POJ 1651 区间DP Multiplication Puzzle

    此题可以转化为最优矩阵链乘的形式,d(i, j)表示区间[i, j]所能得到的最小权值. 枚举最后一个拿走的数a[k],状态转移方程为d(i, j) = min{ d(i, k) + d(k, j) ...

  9. POJ 3042 区间DP(费用提前计算相关的DP)

    题意: 思路: f[i][j][1]表示从i到j的区间全都吃完了 现在在j点 变质期最小是多少 f[i][j][0]表示从i到j的区间全都吃完了 现在在i点 变质期最小是多少 f[i][j][0]=m ...

随机推荐

  1. 浅谈android的am命令

    android系统为大家提供了adb工具,在adb的基础上执行adb shell就可以从PC上对手机侧执行shell命令.和pc的linux系统一样,在系统的默认路径syste/bin下面是可执行程序 ...

  2. Xamarin.Android中使用android:onClick="xxx"属性

    原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...

  3. BZOJ 3172([Tjoi2013]单词-后缀数组第一题+RMQ)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 268   Solved: 145 [ Submit][ St ...

  4. 72_leetcode_Construct Binary Tree from Preorder and Inorder Traversal

    Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that ...

  5. 谷歌技术面试要点(Google面试)(14年5月20日交大专场)

    技术面试的主题 1.简要自我介绍: 姓名.学校.专业 做过的项目与实习 个人主要成就 2.技术评估: 构建与开发算法 编程 计算机基础知识 数据结构 现实世界问题解决能力 设计问题(主要针对博士生) ...

  6. JSP+Ajax站点开发小知识

    一.JSP基础 1.<select  name="love"  size="3">当中的size属性指定了列表框显示选项的条数.假设全部选项多于这个 ...

  7. 四个漂亮CSS样式表

    1. 单像素的边框CSS表格 这是一个非常所用的表格风格. 源码: <!-- CSS goes in the document HEAD or added to your external st ...

  8. c# 获取某个对象的[公有属性]的名称,类型,值

    /// <summary> /// 获取某个对象的[公有属性]的名称,类型,值 /// </summary> /// <typeparam name="T&qu ...

  9. 安装gcc 3.4

    安装   gcc 3.4 f**k,不是为了编译0.11内核.我才懒得鸟3.4的版本号 源代码编译被我实践--"不归路",各种报错,我起码不止是了4个版本号的gcc,各种不兼容.各 ...

  10. Interpolator(插值器)的种类

    Interpolator(插值器)的种类 Interpolator被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeat ...