zoj3892Available Computation Sequence(区间dp)
2015-09-16 12:38
627 查看
这是一道简单的区间dp,刚开始没看到字符数目小于等于100
[code]#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; }
相关文章推荐
- UGUI的image的属性
- Andrew ng ML Coursera Quiz1
- 界面技术(DirectUI)
- UIKeyboardTypeNumberPad 数字键盘自定义按键
- UITableView的分割线从最左侧开始, 右箭头,分割线颜色; UITableViewCell中ImageView位置大小控制
- flash builder4.7 找不到IOS设备解决办法
- Hibernate named query examples
- UI组件之Group
- 用Burpsuite破解网站密码
- UIControl
- Lucene--Query
- UE4星空背景
- Mysql修改unique key
- ANT build.xml文件详解(一)
- UISearchBar相关
- ios 团队开发-UITabbarController整合多个storyboard的controllers
- Find a sorted subsequence of size 3 three in linear time
- UIday1602:封装好的GET 和 POST 方法
- iOS UIButton如何正确调整imageView及titleLabel的位置
- ios开发问题2—uitableviewController中如何改变tableview的位置