hihocoder #1110 : 正则表达 区间dp

来源:互联网 发布:安徽铜陵网络台 编辑:程序博客网 时间:2024/06/04 19:59

1110 : 正则表达式

题目链接:点击打开链接
思路: dp[i][j]为i到j这段中是否符合要求,先把所有的区间标记为不符合,先扫一遍把字符串中是1和0的字符标记为符合,然后在对 *, |,(),按照要求进行检查;
代码如下:
#include<bits/stdc++.h>using namespace std;#define INF 1000000char s[101];int main(){int dp[101][101];while(cin>>s){int len = strlen(s);for(int i = 0 ; i < len; i++){for(int j = 0 ; j < len ; j++){dp[i][j]=INF;}}for(int i = 0; i < len ; i++){if(s[i] == '1' || s[i] == '0'){dp[i][i] = 0;} }for(int i = 1 ; i < len ; i++){for(int j = 0 ; j < len-1 ; j++){int k = i + j;if(s[j] == '(' && s[k] == ')' && dp[j+1][k-1] == 0)dp[j][k] = 0;if(s[k] == '*' && dp[j][k-1] == 0)dp[j][k] = 0;for(int z = j; z < k ; z++){if(dp[j][z] == 0&&dp[z+1][k] == 0)dp[j][k] = 0;if(s[z] == '|' && dp[j][z-1] == 0 &&dp[z+1][k] == 0 && z > 0)dp[j][k] = 0;}}}printf("%s\n",dp[0][len-1] ? "no":"yes");}} 

0 0
原创粉丝点击