这个方程有两种形式,本文采用
if(s[i]=s[j]) dp[i][j]=d[i-1][j-1]
  dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]) (i=<k<j)
 
其实与另一种方法比较:根据j的所有匹配情况取最小值
1.i到j无匹配,取为dp[i][j-1]+1
2.列举所有匹配情况 dp[i][k-1]+dp[k+1][j]
取上述所有情况最小值
 
两者都能获得正确的结果。
同时两者的初始化为 dp[i][j]==1 if(i==j)
规划方向为:
 
   
   
(1) (2)  (3) (4)填写顺序
1 (1) (3) (6) (10)
  1 (2) (5) (9)
    1 (4) (8)
      1 (7)
        1
  1. // ConsoleApplication8.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include<iostream>
  5. #include<string>
  6. #include<memory.h>
  7. using namespace std;
  8. #define min(x,y) (x < y ? x : y)
  9.  
  10. bool isEqual(char c,char b)
  11. {
  12. if(c=='('&&b==')') return true;
  13. if(c=='['&&b==']') return true;
  14. return false;
  15.  
  16. }
  17.  
  18. int main()
  19. {
  20. int dp[][];
  21.  
  22. int len;
  23. cin>>len;
  24. while(len--)
  25. {
  26. string a;
  27. cin>>a;
  28. int len=a.length();
  29. memset(dp,,sizeof(dp));//clear
  30. dp[][]=;
  31. for(int i=;i<len;i++)
  32. {
  33. dp[i][i]=;
  34.  
  35. for(int j=i-;j>=;j--)
  36. {
  37. dp[j][i]=;
  38. if(isEqual(a[j],a[i]))
  39. {
  40. dp[j][i]= min(dp[j][i],dp[j+][i-]);
  41. }
  42. for(int k=j;k<i;k++)
  43. {
  44. dp[j][i]=min(dp[j][k]+dp[k+][i],dp[j][i]);
  45.  
  46. }
  47.  
  48. }
  49.  
  50. }
  51.  
  52. cout<<dp[][len-]<<endl;
  53.  
  54. }
  55.  
  56. }
  1. // ConsoleApplication8.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include<iostream>
  5. #include<string>
  6. #include<memory.h>
  7. using namespace std;
  8. #define min(x,y) (x < y ? x : y)
  9.  
  10. bool isEqual(char c,char b)
  11. {
  12. if(c=='('&&b==')') return true;
  13. if(c=='['&&b==']') return true;
  14. return false;
  15.  
  16. }
  17.  
  18. int main()
  19. {
  20. int dp[][];
  21.  
  22. int len;
  23. cin>>len;
  24. while(len--)
  25. {
  26. string a;
  27. cin>>a;
  28. int len=a.length();
  29. memset(dp,,sizeof(dp));//clear
  30. // cout<<dp[45][56]<<endl;
  31. dp[][]=;
  32. dp[][]=;
  33. for(int i=;i<=len;i++)
  34. {
  35. dp[i][i]=;
  36.  
  37. for(int j=i-;j>=;j--)
  38. {
  39. dp[j][i]=dp[j][i-]+; //没有匹配的情况
  40. for(int k=j;k<i;k++)
  41. {
  42. if(isEqual(a[k-],a[i-]))
  43. {
  44. dp[j][i]= min(dp[j][i],dp[j][k-]+dp[k+][i-]);
  45. }
  46.  
  47. }
  48.  
  49. }
  50.  
  51. }
  52.  
  53. cout<<dp[][len]<<endl;
  54.  
  55. }
  56.  
  57. }

nyoj 括号匹配的更多相关文章

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

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

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

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

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

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

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

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

  5. nyoj 15 括号匹配(2)

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

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

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

  7. DP_括号匹配序列问题

    括号匹配问题 简单括号匹配问题是给出字符串,判断字符串中的括号是否匹配,此类问题核心解决方案就是利用栈的后进先出的特性,从左到右依次遍历字符串,遇左括号进栈,遇右括号将其与栈顶元素配对,若能配对,则栈 ...

  8. 括号匹配 区间DP (经典)

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

  9. YTU 3003: 括号匹配(栈和队列)

    3003: 括号匹配(栈和队列) 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...

随机推荐

  1. Windows phone 8 安装在 VMWare上错误的各种解决方案

    http://windowsasusual.blogspot.jp/2013/01/how-to-launch-windows-phone-8-emulator.html Hardware requi ...

  2. 为什么要有binary-to-text encoding?

    在wikipedia上看MIME的介绍的时候,有一节是关于Content-Transfer-Encoding的,里面提到了binary-to-text encoding,我就想,既然计算机中的信息使用 ...

  3. [转]MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)

    MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)   网上有一篇shangdong_chu网友写的文章介绍如何在Eclipse上配置M ...

  4. C语言字符知识狭区

    C语言字符在用户接口软件编程上经常用到,但是有一些狭区会让编程出现一些小BUG,现在总结与此. 1.'\\' 代表的是字符\,而'\'是不能代表字符\的.通常\后面都要跟上数字或者其他字母来表示一个特 ...

  5. 异步委托 多线程实现摇奖器 winform版

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  6. Lucene基础(一)--入门

    Lucene介绍 lucene的介绍,这里引用百度百科的介绍Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引 ...

  7. OpenGL ES 3.0 基础知识

    首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...

  8. tableView -- tips

    1. 如果发现TableView的第一个sectionHeader不显示, 那么可以断定, 你没有用代理方法来设置 sectionHeader的高度! #pragma mark - delegate ...

  9. 【弱省胡策】Round #5 Handle 解题报告

    这个题是我出的 sb 题. 首先,我们可以得到: $$A_i = \sum_{j=i}^{n}{j\choose i}(-1)^{i+j}B_j$$ 我们先假设是对的,然后我们把这个关系带进来,有: ...

  10. Ubuntu使用apt-get安装本地deb包

    我们都喜欢使用apt-get,因为它实在是让我们大大的省心.但是,有时候我们会为网速慢,安装源不好而烦恼,所以我们可能会将一些常用软件包的deb文件保存在本地以备不时之需.当然了使用dpkg也可以直接 ...