设为首页 加入收藏

TOP

根据括号匹配求区间DP(一)
2013-12-12 14:37:02 来源: 作者: 【 】 浏览:388
Tags:根据 括号 匹配 区间

    题意:给你一些括号,问匹配规则成立的括号的个数。

    思路:这题lrj的黑书上有,不过他求的是添加最少的括号数,是的这些括号的匹配全部成立。

    我想了下,其实这两个问题是一样的,我们可以先求出括号要匹配的最少数量,那么设原来括号的数量为l , 添加了l' .

    那么其实原来括号匹配成功的括号数就是((l + l') / 2 - l') * 2.

    #define N 105

    char a[N] ;

    int dp[N][N] ;

    int f[N][N] ;

    int check(int i ,int j) {

    if(a[i] == '[' && a[j] == ']')return 1 ;

    if(a[i] == '(' && a[j] == ')')return 1 ;

    return 0 ;

    }

    void init() {

    mem(dp ,0) ;

    mem(f ,0) ;

    }

    int main() {

    while(cin 》 a) {

    if(strcmp(a , "end") == 0)break ;

    init() ;

    int l = strlen(a) ;

    for (int i = 0 ; i < l ; i ++ ) {

    dp[i][i] = 1 ;

    dp[i + 1][i] = 0 ;

    }

    for (int i = 1 ; i <= l ; i ++ ) {

    for (int j = 0 ; j + i - 1 < l ; j ++ ) {

    int s = j ;

    int e = j + i - 1 ;

    dp[s][e] = 0 ;

    if(check(s ,e))dp[s][e] = min(dp[s][e] , dp[s + 1][e - 1]) ;

   

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇区间内所有的回文子序列 下一篇一道DP练习题详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)