内存限制:64MB 时间限制:1000ms 特判: No

通过数:54 提交数:158 难度:6

题目描述:

给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。

如:

[]是匹配的

([])[]是匹配的

((]是不匹配的

([)]是不匹配的

输入描述:

第一行输入一个正整数N,表示测试数据组数(N<=10)

每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100

输出描述:

对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行

样例输入:

4

[]

([])[]

((]

([)]

样例输出:

0

0

3

2

思路

用dp[i][j]dp[i][j]dp[i][j]储存iii到jjj位置需要添加括号的数量

因为要找最小的次数,所以给dp[i][j]dp[i][j]dp[i][j]的初始值可以设为字符串的长度(足够大就可以),当i=ji=ji=j的时候,至多需要111个括号就能匹配了,所以初始值为111

如果当前iii和jjj位置的括号可以匹配,那么[i,j][i,j][i,j]之间需要的括号数和[i+1,j−1][i+1,j-1][i+1,j−1]的相同,所以dp[i][j]=dp[i+1][j−1]dp[i][j]=dp[i+1][j-1]dp[i][j]=dp[i+1][j−1]

然后查询[i,j][i,j][i,j]之间需要的最少括号数,dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])

AC代码

/*************************************************************************
> File Name: 15.cpp
> Author: WZY
> School: HPU
> Created Time: 2019年01月21日 15:18:59
************************************************************************/
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ms(a,b) memset(a,b,sizeof(a))
#define pi acos(-1.0)
#define INF 0x7f7f7f7f
const double E=exp(1);
const int maxn=1e3+10;
const int mod=1e9+7;
using namespace std;
char ch[maxn];
// dp[i][j]表示从i到j位置匹配所需要添加的括号数
int dp[maxn][maxn];
bool check(char a,char b)
{
if((a=='['&&b==']')||(a=='('&&b==')'))
return true;
else
return false;
}
int main(int argc, char const *argv[])
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
cin>>ch;
int l=strlen(ch);
for(int i=0;i<l;i++)
{
dp[i][i]=1;
dp[i+1][i]=0;
}
for(int i=l-2;i>=0;i--)
{
for(int j=i+1;j<l;j++)
{
dp[i][j]=l;
if(check(ch[i],ch[j]))
dp[i][j]=dp[i+1][j-1];
for(int k=i;k<j;k++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
}
}
cout<<dp[0][l-1]<<endl;
}
return 0;
}

NYOJ-15:括号匹配(二)的更多相关文章

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

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

  2. nyoj 15 括号匹配(二) (经典dp)

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

  3. nyoj 15 括号匹配(2)

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

  4. nyoj 15 括号匹配(二)动态规划

    当时看到(二)就把(一)做了, 一很容易,这道题纠结了好几天,直到今晚才看懂别人的代码谢,勉强才写出来.................... 不愧是难度6的题. #include <stdio ...

  5. NYOJ 题目15 括号匹配(二)(区间DP)

    点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...

  6. 南阳理工大学oj 题目15 括号匹配(二)

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

  7. POJ 1141 Brackets Sequence(括号匹配二)

    题目链接:http://poj.org/problem?id=1141 题目大意:给你一串字符串,让你补全括号,要求补得括号最少,并输出补全后的结果. 解题思路: 开始想的是利用相邻子区间,即dp[i ...

  8. 南阳理工OJ 15 括号匹配

    思路:动态规划,设dp[i][j]表示第i个字符到第j个字符所需要的最少匹配数,则:(1),如果从第i到j-1个字符中没有一个与第j个字符匹配,那么状态转移方程为 dp[i][j] = dp[i][j ...

  9. [原]NYOJ 括号匹配系列2,5

    本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...

  10. NYOJ - 括号匹配(二)(经典dp)

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

随机推荐

  1. 终端的rz命令,覆盖原文件。

    不覆盖:rz 覆盖 同名文件:rz -y

  2. Python 实现清屏

    使用Python的IDLE到某个程序节点时,需要清屏以提高清晰度. 但IDLE本身并没有这个功能,我们可以通过扩展来实现类似于Ctrl + L的清屏 资料来自于百度经验的 BinnLZeng 先制作一 ...

  3. perceptual loss

    https://arxiv.org/abs/1603.08155 两个网络:image transfer网络和loss网络 image transfer网络: 将输入图片y通过映射f W (x)得到输 ...

  4. react-native 安装的时候遇到的问题

    JAVA  JDK必须要版本8以上(卡了我好大一会,不要忘了环境变量换成8的路径) 这个报错是因为我的版本没升级? 总之解决方法如下 给升级下就好啦~ 然后出现个这么个问题,是因为我用的测试手机是红米 ...

  5. vim打开txt文件看到^@字符

    '\0'是不可见字符,使用vim编辑器查看的文本文件中如果包含'\0'字符,vim会自动将'\0'字符转换为^@字符. 看下面的代码: #include <stdio.h> #includ ...

  6. Windows下的pydoc

    使用C调用python -m pydoc指令,实现命令行直接使用pydoc // Win32Project1.cpp : 定义控制台应用程序的入口点. // #include <stdio.h& ...

  7. 微信退款回调AES算法(AES-256-ECB)

    解密步骤如下: (1)对加密串A做base64解码,得到加密串B (2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)--> ...

  8. L360 Most People Spend Their Time in Just 25 Places

    Some people are always out on the town, going to concerts, restaurant openings, you name it. They're ...

  9. JavaScript中call和apply方法的使用

    acvaScript中的call()方法和apply()方法,在某些时候这两个方法还确实是十分重要的.1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法.2. 相同点:这两 ...

  10. C 设计模式:装饰模式

    最近在公司分享了下C语言版的设计模式,记录一下吧. 参考:<设计模式之禅>中“装饰模式”章节. 上面书中是用C++来实现的,我使用了书中的例子,改用C语言来实现. 一.基础知识 面向对象最 ...