NYOJ-15:括号匹配(二)
内存限制: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:括号匹配(二)的更多相关文章
- [NYOJ 15] 括号匹配(二)
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[&qu ...
- nyoj 15 括号匹配(二) (经典dp)
题目链接 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些 ...
- nyoj 15 括号匹配(2)
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[" ...
- nyoj 15 括号匹配(二)动态规划
当时看到(二)就把(一)做了, 一很容易,这道题纠结了好几天,直到今晚才看懂别人的代码谢,勉强才写出来.................... 不愧是难度6的题. #include <stdio ...
- NYOJ 题目15 括号匹配(二)(区间DP)
点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...
- 南阳理工大学oj 题目15 括号匹配(二)
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[&qu ...
- POJ 1141 Brackets Sequence(括号匹配二)
题目链接:http://poj.org/problem?id=1141 题目大意:给你一串字符串,让你补全括号,要求补得括号最少,并输出补全后的结果. 解题思路: 开始想的是利用相邻子区间,即dp[i ...
- 南阳理工OJ 15 括号匹配
思路:动态规划,设dp[i][j]表示第i个字符到第j个字符所需要的最少匹配数,则:(1),如果从第i到j-1个字符中没有一个与第j个字符匹配,那么状态转移方程为 dp[i][j] = dp[i][j ...
- [原]NYOJ 括号匹配系列2,5
本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...
- NYOJ - 括号匹配(二)(经典dp)
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描写叙述 给你一个字符串,里面仅仅包括"(",")","[&quo ...
随机推荐
- mybatis源码解析之Configuration加载(一)
概要 上一篇,我们主要搭建了一个简单的环境,这边我们主要来分析下mybatis是如何来加载它的配置文件Configuration.xml的. 分析 public class App { public ...
- Appium简介及工作原理
一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver ...
- Hello vue.js的随笔记录
数据双向绑定的script在组件定义位置后面才顶用. 使用它的话,引用js就好,比较简单. 声明一个vm对象,new Vue({}).这个构造里传一个对象,包含el:界面元素,data:数据,meth ...
- Python中字符串的处理方法
1.字符串 word = '字符串' sentence = "这是一个句子." paragraph = """这是一个段落, 可以由多行组成" ...
- 将float数据类型转换为str
示例程序: #include <stdio.h> . . void UART_send_byte(char dat); void UART_send_string(unsigned cha ...
- font-family 中文字体列表
华文细黑:STHeiti Light [STXihei] 华文黑体:STHeiti 华文楷体:STKaiti 华文宋体:STSong 华文仿宋:STFangsong 儷黑 Pro:LiHei Pro ...
- sql在所有存储过程中查询包含某字符串的执行语句
直接在查询分析器中执行以下代码就行: 方法一) select name from sysobjects o, syscomments s where o.id = s.id and text like ...
- oraclesql语句笔记
1. ORA-00947:Not enough values 原因:values没有写足够的值与select()中的字段对应 2.查看一张表中共有多少个字段 select count(*) from ...
- 软工个人作业4——Alpha阶段个人总结
一.个人总结 1.在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 经过本次alpha阶段的冲刺,首先学到了很多,收获了很多,同时也蛮辛苦的.其实我觉得作为组员我有很认 ...
- python实现批量压缩文件夹
前段时间碰到一个需要把目录下文件夹压缩的项目,但是度娘里没找到,只好自己写脚本了. #coding:utf-8 import os filePath = raw_input("请输入路径:& ...