思路:

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!");
}

BZOJ 1055 DP的更多相关文章

  1. Bzoj 1055: [HAOI2008]玩具取名 (区间DP)

    Bzoj 1055: [HAOI2008]玩具取名 (区间DP) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间动态规划和可 ...

  2. [BZOJ 1055] [HAOI2008] 玩具取名 【记忆化搜索】

    题目链接:BZOJ - 1055 题目分析 这种类似区间 DP 的记忆化搜索都是很相近的,比如字符串压缩和字符串扩展都差不多. 都是将现在 Solve 的区间分成子区间,再求解子区间. 这道题 Sol ...

  3. bzoj 3622 DP + 容斥

    LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...

  4. [BZOJ 1055][HAOI2008]玩具取名(DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1055 分析: 比较难想的dp f[i][j][c]表示i..j能否压缩成字符c 那么怎 ...

  5. bzoj 1055 [HAOI2008]玩具取名(区间DP)

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1258  Solved: 729[Submit][Statu ...

  6. BZOJ 1055 区间DP

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1144  Solved: 668[Submit][Statu ...

  7. BZOJ 1055 玩具取名(区间DP)

    很显然的区间DP,定义dp[i][j][k], 如果dp[i][j][k]=1表示字符串[i,j]可以组成k字符. # include <cstdio> # include <cst ...

  8. Bzoj 1055 玩具取名(区间DP)

    题面 题解 字符很麻烦,不妨用数字代替(比如1代表'W') const char c[5] = {0, 'W', 'I', 'N', 'G'}; 接着,像这种两个子串可以合并成另一个子串的题可以考虑区 ...

  9. bzoj 1055: [HAOI2008]玩具取名【区间dp】

    不难想,就是处理起来比较麻烦 设f[i][j][k]为是否可以把区间(i,j)合并为k,初始状态是f[i][j][s[i]]=1,转移的话另一段枚举长度x,向(i-x,j),(i,j+x)转移 把四个 ...

随机推荐

  1. Union File System

    目录 Union File System AUFS Docker是如何使用AUFS的 image layer 和 AUFS (docker版本不同可能会有区别,我的是在/var/lib/docker下 ...

  2. vue单文件中引用路径的处理

    原文地址:vue单文件中引用路径的处理如有错误,欢迎指正! vue单文件的开发过程中,在单文件模版中可能会涉及到文件路径的处理,比如 <img>, style 中的 background ...

  3. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

    这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...

  4. 别了WindowsXP

    生命中有太多的迎来送往,今日全世界都在告别它. 虽然自己已经在很久之前没有用XP系统了.告别它不如在一定意义上告别自己的一段时光... 2001年个人第一台电脑...初次安装XP,两张光盘一张安装盘一 ...

  5. C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别

    1 绝对路径与相对路径 绝对路径表示相对容易得多,依次将文件所在盘符文件夹逐级展开就是绝对路径: ofstream infile("E:\\MyDoc\\file.txt", io ...

  6. 作为一个程序员怎么通过android开发赚钱

    ​ 上面是一个程序员通过Android开发每天的收入,信则有! 自己学安卓差不多,有一年了.我本来是从事javaweb开发的,可能学习安卓上手会快点.其实安卓没有那难 .首先开发安卓程序,要有一个,开 ...

  7. C语言之基本算法38—格式化输出10000以内的全部完数

    //穷举法! /* ================================================================== 题目:求10000以内的全部完数,统计数量并以 ...

  8. 浅谈 trie树 及事实上现

    定义:又称字典树,单词查找树或者前缀树,是一种用于高速检索的多叉树结构. 如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 核心思想:是空间换时间.利用字符串的公共前缀来减少查询时间的开 ...

  9. Linux 经常使用快捷键

    桌面下: Alt+F5   取消最大化窗体 Alt+F9   最小化窗体  Alt+F10  最大化窗体  Alt+空格 打开窗体的控制菜单 (点击窗体左上角图标出现的菜单)     ctl+r   ...

  10. java9新特性-12-集合工厂方法:快速创建只读集合

    1.官方Feature 269: Convenience Factory Methods for Collections 2.产生背景 要创建一个只读.不可改变的集合,必须构造和分配它,然后添加元素, ...