BZOJ 1055 DP
来源:互联网 发布:淘宝店铺定位什么意思 编辑:程序博客网 时间:2024/06/07 08:22
思路:
f[i][j][k]表示i到j匹配了字母k
if(m,n能匹配上k)
f[i][j][k]|=f[i][l][m]&f[l+1][j][n]
一个大枚举 就OK了~
//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int W,I,N,G;bool f[205][205][5],vis[5][5][5],flag;char ch[3],goal[222];int get(char x){ if(x=='W')return 1; if(x=='I')return 2; if(x=='N')return 3; return 4;}int main(){ scanf("%d%d%d%d",&W,&I,&N,&G); for(int i=1;i<=W;i++) scanf("%s",ch),vis[1][get(ch[0])][get(ch[1])]=1; for(int i=1;i<=I;i++) scanf("%s",ch),vis[2][get(ch[0])][get(ch[1])]=1; for(int i=1;i<=N;i++) scanf("%s",ch),vis[3][get(ch[0])][get(ch[1])]=1; for(int i=1;i<=G;i++) scanf("%s",ch),vis[4][get(ch[0])][get(ch[1])]=1; scanf("%s",goal+1); int len=strlen(goal+1); for(int i=1;i<=len;i++)f[i][i][get(goal[i])]=1; for(int le=1;le<=len;le++) for(int st=1;st<=len;st++){ int ed=st+le; if(ed>len)break; for(int k=1;k<=4;k++) for(int l=st;l<ed;l++) for(int m=1;m<=4;m++) for(int n=1;n<=4;n++) if(vis[k][m][n]) f[st][ed][k]|=f[st][l][m]&f[l+1][ed][n]; } if(f[1][len][1])putchar('W'),flag=1; if(f[1][len][2])putchar('I'),flag=1; if(f[1][len][3])putchar('N'),flag=1; if(f[1][len][4])putchar('G'),flag=1; if(!flag)puts("The name is wrong!");}
0 0
- BZOJ 1055 DP
- [BZOJ]1055: [HAOI2008]玩具取名 DP
- bzoj 1055: [HAOI2008]玩具取名 dp
- 【bzoj 1055】玩具取名(区间DP)
- bzoj 3864 dp套dp
- BZOJ 1087 状压DP
- BZOJ 1207 DP
- BZOJ 2152 (树形DP)
- BZOJ 3791 作业 DP
- BZOJ 4352 预处理 + DP
- bzoj 3037(树形DP)
- bzoj 1003(spfa+dp)
- BZOJ 1003 SPFA + DP
- [DP] BZOJ 4247 挂饰
- bzoj 4027 树形dp
- bzoj 3573(树形DP)
- bzoj 1021 dp
- bzoj 4347 dp
- 通过aop拦截mybatis接口dao
- Php:时间日期计算
- liferay Portal CE6.2 新开发portlet如何设置权限(Security and Permission resources )
- 有关swift的最新技术
- 设置Eclipse中的tab键为4个空格的完整方法
- BZOJ 1055 DP
- 51nod 1503 && codeforces570e Pig and Palindromes
- android 正则验证手机号是否正确
- poj1151 Atlantis
- 尚硅谷java学习笔记——6.异常处理
- 详细分析stm32f10x.h
- Java Socket 通信 (一)
- Ubuntu16.04+Eclipse+pydev配置
- cmd窗口的中文变成乱码问题