zoj3892Available Computation Sequence(区间dp)
来源:互联网 发布:u盘数据恢复文件乱码 编辑:程序博客网 时间:2024/05/21 09:45
这是一道简单的区间dp,刚开始没看到字符数目小于等于100
#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <ctime>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define inf -0x3f3f3f3f#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mem0(a) memset(a,0,sizeof(a))#define mem1(a) memset(a,-1,sizeof(a))#define mem(a, b) memset(a, b, sizeof(a))typedef long long ll;const int MOD=1e9+7;ll dp[111][111][2];//第一维表示长度,第二维表示开头,0表示数字,1表示字母char s[100100];char s1[110];int cnt1,cnt2;int num[2220];void solve(){ for(int i=2;i<cnt2;i++){ //表示长度 for(int j=1;j+i-1<cnt2;j++){ //从哪里开始 for(int k=j;k<i+j-1;k++){ //第一个从哪里开始到哪里结束 if(s1[k]=='*'){ dp[i][j][1]+=(dp[i-k+j-1][k+1][0]*dp[k-j+1][j][1])%MOD; dp[i][j][1]%=MOD; dp[i][j][1]+=(dp[i-k+j-1][k+1][1]*dp[k-j+1][j][0])%MOD; dp[i][j][1]%=MOD; dp[i][j][0]+=(dp[i-k+j-1][k+1][0]*dp[k-j+1][j][0])%MOD; dp[i][j][0]%=MOD; } if(s1[k]=='.'){ dp[i][j][0]+=(dp[i-k+j-1][k+1][1]*dp[k-j+1][j][1])%MOD; dp[i][j][0]%=MOD; } if(s1[k]=='^'){ dp[i][j][1]+=(dp[i-k+j-1][k+1][1]*dp[k-j+1][j][1])%MOD; dp[i][j][1]%=MOD; } if(s1[k]=='!'){ dp[i][j][1]+=(dp[i-k+j-1][k+1][0]*dp[k-j+1][j][1])%MOD; dp[i][j][1]%=MOD; dp[i][j][1]+=(dp[i-k+j-1][k+1][1]*dp[k-j+1][j][0])%MOD; dp[i][j][1]%=MOD; dp[i][j][1]+=(dp[i-k+j-1][k+1][0]*dp[k-j+1][j][0])%MOD; dp[i][j][1]%=MOD; dp[i][j][0]+=(dp[i-k+j-1][k+1][1]*dp[k-j+1][j][1])%MOD; dp[i][j][0]%=MOD; } } } }}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%s",&s); int len=strlen(s); mem0(num); mem0(dp); cnt1=1; cnt2=1; int flag=0; for(int i=0;i<len;i++){ if(s[i]=='!'||s[i]=='.'||s[i]=='^'||s[i]=='*'){ s1[cnt1++]=s[i]; flag=0; } else if(flag==0){ if(s[i]>='0'&&s[i]<='9'){ dp[1][cnt2][0]=1; cnt2++; flag=1; } else if(s[i]>='a'&&s[i]<='z'){ dp[1][cnt2][1]=1; cnt2++; flag=1; } } } solve(); printf("%d\n",(dp[cnt1][1][0]+dp[cnt1][1][1])%MOD); } return 0;}
0 0
- zoj3892Available Computation Sequence(区间dp)
- ZOJ-3892- Available Computation Sequence【区间dp】
- poj1141 Brackets Sequence 区间dp
- ZOJ1463:Brackets Sequence(区间DP)
- POJ1141 Brackets Sequence 区间DP
- pku1141 Brackets Sequence 区间DP
- sdut 2169 Sequence 区间dp
- poj1141 Brackets Sequence--区间dp
- Brackets Sequence (区间dp)
- ZOJ 3892 Available Computation Sequence
- POJ 1141 Brackets Sequence(区间DP)
- poj 1141Brackets Sequence[区间dp]
- POJ 1141 Brackets Sequence ( 区间DP )
- POJ 1141 - Brackets Sequence 区间DP
- POJ 1141(Bracket Sequence)-区间DP
- POJ-1141 Brackets Sequence 经典区间DP
- POJ 1141 Brackets Sequence 区间dp
- POJ 1141 Brackets Sequence (区间DP)
- docker 构建网站初探
- Android开发之QQ侧滑面板
- 编译原理总结
- Axis2(WebService)经典教程
- 对 Jsp及Servlet 的简单剖析
- zoj3892Available Computation Sequence(区间dp)
- LeetCode Best Time to Buy and Sell Stock IV
- .net中ImageField绑定图片路径
- java 逆置 单链表
- hdu 5439 Aggregated Counting(找规律)
- 将char[][] 赋值给char**的结果
- Xcode添加常用的代码片段 (code sinppets)
- Python 学习(2)---基本知识整理
- 在Linux命令行下运行Matlab