热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[ACM]携程预赛第一场括号匹配(动态规划)

括号匹配TimeLimit:20001000ms(JavaOther)MemoryLimit:3276832768K(JavaOther)Total
括号匹配
Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 110   Accepted Submission(s) : 46

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

 

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

 

Input

 

第一行输入一个正整数N,表示测试数据组数(N<=100)。
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100。

 

Output

 

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

 

Sample Input

 

4
[]
([])[]
((]
([)]

 

Sample Output

 

0
0
3
2

 

Source

 

CodingTrip - 携程编程大赛 (预赛第一场)

 

代码:

#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=250;
const int inf=0x7fffffff;
char str[maxn];
int dp[maxn][maxn],ps[maxn][maxn];
//dp[i][j]代表串从i到j需要添加几个字符才能合法,ps[i][j],记录的从i到j在哪里断成两部分
int len;

int main()
{
    int k;cin>>k;
    while(k--)
    {
        cin>>str;
        len=strlen(str);
        memset(dp,0,sizeof(dp));
        for(int i=0;i(dp[i][mid]+dp[mid+1][j]))
                {
                    dp[i][j]=dp[i][mid]+dp[mid+1][j];
                    ps[i][j]=mid;//mid为串i到j区间断开的位置
                }
            }
        }
        cout< 
 


 


推荐阅读
author-avatar
书友53034809
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有