括号匹配(二)

时间限制:1000 ms  |  内存限制:65535 KB
难度:6
描述
给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的

输入
第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100
输出
对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
样例输入
4
[]
([])[]
((]
([)]
样例输出
0
0
3
2

想法:

动态规划;

代码:

#include<stdio.h>
#include<string.h>
int data[110][110];
char str[110];
int min(int x,int y)
{return x>y?y:x;}
int is(char a,char b)
{
    if(((a=='(')&&(b==')'))||((a=='[')&&(b==']')))
        return 1;
    return 0;
}
int main()
{
    int n;
    scanf("%d",&n);
    getchar();
    while(n--)
    {
    int i,j,k,len=0,mp;
    memset(data,0,sizeof(data));
    scanf("%s",str+1);
    len=(int)strlen(str+1);
    for(i=1;i<=len;i++)
        data[i][i]=1;//初始化data【】【】

for(j=1;j<=len;j++)
    {
        for(i=j-1;i>=1;i--)
        {
            mp=0x1fffff;
            for(k=i+1;k<=j;k++)
            {
            if(is(str[i],str[k]))
            {mp=min(mp,(data[i+1][k-1]+data[k+1][j]));}
            }
            data[i][j]=min(mp,data[i+1][j]+1);
        }
    }
    printf("%d\n",data[1][len]);
    }
    return 0;

}

注:data【i】【j】保存从第i个符号到第j个符号所要插入符号的个数。

想法:动态规划+搜索

代码:

#include<stdio.h>
#include<string.h>
int f[110][110];
char str[110];
int min(int x,int y)
{return x>y?y:x;}
int fun(int i,int j)
{
    if(i>j)  return 0;
    if(f[i][j]>=0) return f[i][j];
    if(i==j) return f[i][j]=1;
    int mid,mp=110;
    if((str[i]=='('&&str[j]==')')||(str[i]=='['&&str[j]==']'))
        mp=fun(i+1,j-1);
    for(mid=i;mid<j;mid++)
    {
    mp=min(mp,fun(i,mid)+fun(mid+1,j));
    }
    return f[i][j]=mp;

}
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
    memset(f,-1,sizeof(f));
    memset(str,0,sizeof(str));
    scanf("%s",str);
    printf("%d\n",fun(0,strlen(str)-1));
    }
    return 0;
}

注:f【i】【j】保存从第i个符号到第j个符号所要插入符号的个数。

南阳理工acm 15括号匹配(二)相关推荐

  1. [NYOJ 15] 括号匹配(二)

    括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述给你一个字符串,里面只包含"(",")","[" ...

  2. 457. 括号匹配二

    [题目描述]: 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些 ...

  3. 南阳理工ACM 题4《ASCII码排序》

    4-ASCII码排序 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:76 submit:115 题目描述: 输入三个字符(可以重复)后,按各字符的A ...

  4. 单调递增最长子序列(南阳理工ACM)

    描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字 ...

  5. 矩形嵌套 南阳理工ACM

    描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度).例如(1, ...

  6. 南阳理工ACM 题目73 比大小

    比大小 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给你两个很大的数,你能不能判断出他们两个数的大小呢? 比如123456789123456789要大于-123456 ...

  7. 兰州烧饼 南阳理工ACM 题目779

    题目779 题目信息 运行结果 本题排行 讨论区 兰州烧饼 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄 ...

  8. 南阳理工ACM 题目67 三角形面积

    三角形面积 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积 输入 每行是一组测试数据,有6个整数x1 ...

  9. Fibonacci数 南阳理工ACM 题目13

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地 ...

  10. 奋斗的小蜗牛 南阳理工ACM 题目599

    题目599 题目信息 运行结果 本题排行 讨论区 奋斗的小蜗牛 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 传说中能站在金字塔顶的只有两种动物,一种是鹰,一种是蜗牛. ...

最新文章

  1. 【FFmpeg】结构体详解(二):AVStream、AVPacket、AVOutputFormat
  2. 690.员工的重要性
  3. 动态新增元素的js无效的解决方法
  4. 读取Webpage表中的内容
  5. Python Pandas –数据输入和输出
  6. 在html5中 空标签可以不写,HTML5中标签之间尽量不要加enter或者空格
  7. 统计自然语言处理基础——学习摘要(1)
  8. 机器学习中常用的优化算法:
  9. [九度][何海涛] 二叉树中和为某一值的路径
  10. 桌面计算机 回收站图标,桌面回收站图标不见了?回收站图标没了?3种方法快速解决...
  11. 嵌入式 职位描述 职位要求
  12. Cisco路由器之IPSec 虚拟专用网(内附配置案例)
  13. option样式美化 css,CSS select样式优化
  14. 基本统计值的计算(平均值,中位数,方差)
  15. C++继承以及菱形继承
  16. jenkins构建时,从国内maven私服下载jar包失败
  17. 软考高项论文写作要求有哪些
  18. 【Irrlicht Engine笔记】test5-UserInterface
  19. 使用RMAN的备份及恢复一例-丢失所有控制文件
  20. 2021年4月股市行情预测

热门文章

  1. Java 技术书籍大全
  2. [虚拟机]Windows server 2019 无法安装 .NET Frameword 3.5
  3. 计算机组成原理白中英 可见,计算机组成原理白中英主编ppt课件.ppt
  4. Fortran代码C化或Fortran与C/C++混编过程中矩阵转置的实现
  5. iperf3使用方法说明
  6. 高通android刷机工具,步步高工具高通版刷机救砖教程图解
  7. python 基础知识复习巩固
  8. java语言程序设计(梁勇)
  9. php导出excel出现乱码,完美解决phpexcel导出到xls文件出现乱码的问题
  10. 跨平台开源集成开发环境Eclipse