zoukankan      html  css  js  c++  java
  • hihoCoder#1110 : 正则表达式(区间DP)

      

    #1110 : 正则表达式

    1.思路

      区间DP,dp[i][j]代表区间i到j是否为正则表达式.

    2.代码

     1 #define debug printf("%s: %d
    ", __FUNCTION__, __LINE__);
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 const int N = 105;
     5 char s[N];
     6 bool dp[N][N];
     7 
     8 int main() {
     9     while(~scanf("%s", s)) {
    10         int n = strlen(s);
    11         for(int i = 0; i < n; ++ i) {
    12             if(s[i] == '0' || s[i] == '1') {
    13                  // 对于长度为1的区间,当为1或0时为正则表达式 
    14                 dp[i][i] = 1;  
    15             }
    16             else {
    17                 // 不为1或0时为非正则表达式
    18                 dp[i][i] = 0;
    19             }
    20         }
    21     // 注意状态转移时运算符为或(|), 以为只要满足题目中的一种情况就可以
    22         for(int l = 2; l <= n; ++ l) {
    23             for(int i = 0; i+l-1 < n; ++ i) {
    24                 int j = i+l-1;
    25                 dp[i][j] = 0;                  
    26                 if(i<j-1&&s[i]=='('&&s[j]==')') {
    27                     dp[i][j] |= dp[i+1][j-1];  
    28                     // [i+1,j-1]是正则表达式,则([i+1,j-1])是正则表达式
    29                 }
    30                 if(s[j]=='*') {               
    31                     // P是正则表达式,则P*也是正则表达式
    32                     dp[i][j] |= dp[i][j-1];
    33                 }
    34                 for(int k = i; k < j; ++ k) {
    35                     // 当区间[i,k]和区间[k+1,j]为正则表达式时,区间[i,j]当然也是
    36                     dp[i][j] |= (dp[i][k]&dp[k+1][j]); 
    37                     if(k>i&&s[k]=='|') {
    38                         //P和Q都是正则表达式,则P|Q是正则表达式。 
    39                         dp[i][j] |= (dp[i][k-1]&dp[k+1][j]); 
    40                     } 
    41                 }
    42             }
    43         }
    44         if(dp[0][n-1]) { 
    45             puts("yes");
    46         } 
    47         else {
    48             puts("no");
    49         } 
    50     } 
    51     return 0;
    52 }

      

  • 相关阅读:
    安装mongoDB时,总是报错,启动不了
    koa2路由
    异步操作async await
    nodeJs koa-generator脚手架
    nodeJs学习-19 个人博客案例-(1)数据字典
    nodeJs学习-18 mysql数据库了解
    nodeJs学习-17 博客案例
    nodeJs学习-16 数据字典示例
    前端图片压缩后,文件流上传
    Linux用户名显示-bash-4.1$快速排查
  • 原文地址:https://www.cnblogs.com/topk/p/7553660.html
Copyright © 2011-2022 走看看