hihoCoder 1110 正则表达式 (区间dp)
2015-04-26 17:06
477 查看
题意:
根据题目要求判断输入的串是否是正则表达式
给定一个字符串,判断其是否为合法的正则表达式。
一个正则表达式定义为:
1:0是正则表达式,1也是正则表达式。
2:P和Q都是正则表达式,则PQ是正则表达式。
3:P是正则表达式,则(P)是正则表达式
4:P是正则表达式,则P*也是正则表达式
5:P和Q都是正则表达式,则P|Q是正则表达式。
题解:
dp[i][j]表示ij区间是否是正则表达式。接着就是根据题目要求dp就好了。
根据题目要求判断输入的串是否是正则表达式
给定一个字符串,判断其是否为合法的正则表达式。
一个正则表达式定义为:
1:0是正则表达式,1也是正则表达式。
2:P和Q都是正则表达式,则PQ是正则表达式。
3:P是正则表达式,则(P)是正则表达式
4:P是正则表达式,则P*也是正则表达式
5:P和Q都是正则表达式,则P|Q是正则表达式。
题解:
dp[i][j]表示ij区间是否是正则表达式。接着就是根据题目要求dp就好了。
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #include<string.h> #include<vector> #include<queue> #include<map> #include<set> #define B(x) (1<<(x)) using namespace std; typedef long long ll; void cmax(int& a,int b){ if(b>a)a=b; } void cmin(int& a,int b){ if(b<a)a=b; } void cmax(ll& a,ll b){ if(b>a)a=b; } void cmin(ll& a,ll b){ if(b<a)a=b; } void add(int& a,int b,int mod){ a=(a+b)%mod; } void add(ll& a,ll b,ll mod){ a=(a+b)%mod; } const int oo=0x3f3f3f3f; const ll OO=0x3f3f3f3f3f3f3f3f; const ll MOD=1000000007; const int maxn=105; bool dp[maxn][maxn]; char str[maxn]; int main(){ //freopen("E:\\read.txt","r",stdin); while(scanf("%s",str+1)!=EOF){ int n=strlen(str+1); memset(dp,false,sizeof dp); for(int i=1;i<=n;i++){ if(str[i]=='0'||str[i]=='1') dp[i][i]=true; } for(int L=2;L<=n;L++){ for(int i=1;i+L-1<=n;i++){ int j=i+L-1; if(dp[i+1][j-1]&&str[i]=='('&&str[j]==')') dp[i][j]=true; if(dp[i][j-1]&&str[j]=='*') dp[i][j]=true; if(dp[i][j])continue; for(int k=i;k<j;k++){ if(dp[i][k]&&dp[k+1][j]) dp[i][j]=true; if(dp[i][k]&&dp[k+2][j]&&str[k+1]=='|') dp[i][j]=true; if(dp[i][j])break; } } } if(dp[1] ) printf("yes\n"); else printf("no\n"); } return 0; }
相关文章推荐
- hihocoder 1110 正则表达式 (区间dp)
- hihoCoder--1110 正则表达式(区间dp)
- hihoCoder挑战赛7 1001 正则表达式 (区间DP)
- hihoCoder 1110 : 正则表达式
- hihocoder 1110 正则表达式
- hihocoder 1110 正则表达式
- hihocoder #1110 : 正则表达 区间dp
- hihocoder-1285 智力竞赛(区间dp)
- hihocoder 1149 : 回文字符序列(区间dp)
- 【LeetCode61-70】旋转链表,三道标准DP问题,正则表达式,word文字排版规则,
- hdu 6170 正则表达式 dp
- 【hihocoder 1388】【区间DP】A Game【给出一个数列,两人每次从数列的头尾取数,小ho 先取,小hi每次都采取最优策略,问小ho最终能取得的数的总和最大是多少】
- hdu 6170 正则表达式 dp
- hihocoder A Game 区间dp
- hdu 6170 正则表达式 dp
- hdu 6170 正则表达式 dp
- 【dp】正则表达式匹配问题
- hdu 6170 正则表达式 dp
- hdu 6170 正则表达式 dp
- java中汉子的正则表达式区间,以及常用汉子的正则表达式