bzoj 1055
来源:互联网 发布:网络钢琴 编辑:程序博客网 时间:2024/06/05 11:47
玩具起名~~
题目不复制了~~
dp~
dp【i】【j】【k】表示 第i个到第j个区间可不可以用k来表示
一开始没有注意到 可以由一个字母转化过来蒙圈了许久。╮(╯_╰)╭
注意需要加一个记忆化搜索,,,这个加的我好心累、
时间优化还是挺明显的orz
下面是代码:
#include<cstdio>#include<algorithm>#include<cstring>//by mars_chusing namespace std;int n[5];char c[5][21][5];char s[205];int dp[205][205][5];char m[5]={'W','I','N','G'};int hash(char c){ if(c == 'W') return 0; if(c == 'I') return 1; if(c == 'N') return 2; if(c == 'G') return 3;}bool dfs(int l,int r,int k){ if(l == r) return (s[l] == m[k]); if(dp[l][r][k] != -1) return dp[l][r][k]; for(int i=0;i<n[k];i++) { for(int j=l;j<r;j++) { if(dfs(l,j,hash(c[k][i][0])) && dfs(j+1,r,hash(c[k][i][1]))) { dp[l][r][k]=1; return true; } } } dp[l][r][k]=0; return false;} int main(){ memset(dp,-1,sizeof(dp)); for(int i=0;i<4;i++) { scanf("%d",&n[i]); } for(int i=0;i<4;i++) { for(int j=0;j<n[i];j++) { scanf("%s",c[i][j]); } } scanf("%s",s); int len=strlen(s); int flag=0; for(int i=0;i<4;i++) { if(dfs(0,len-1,i)) flag=1,printf("%c",m[i]); //注意是len-1 } if(flag == 0) printf("The name is wrong!\n"); return 0;}
0 0
- BZOJ 1055
- bzoj 1055
- bzoj 1055
- bzoj 1055 玩具取名
- BZOJ 1055 DP
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- Android 消息机制学习
- Jmockit对接口与基类的mock
- [C++ 面试基础知识总结]字符串,向量和数组
- python版opencv入门
- 从sal_listen_port()研究linphone
- bzoj 1055
- 九度-1087 约数的个数[数论]
- ofbiz架构的分布式改造(一)
- eclipse maven创建web project
- 【Android数据传递】Intent传递List和Object和List<Object>(附源码)(转)
- 安卓滑动冲突的理解和一些解决思路
- Java和Android中的注解
- 关于友盟IM自定义表情包的使用
- 路径中/斜杠与\反斜杠的定义