BZOJ 1055 DP
思路:
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的更多相关文章
- Bzoj 1055: [HAOI2008]玩具取名 (区间DP)
Bzoj 1055: [HAOI2008]玩具取名 (区间DP) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间动态规划和可 ...
- [BZOJ 1055] [HAOI2008] 玩具取名 【记忆化搜索】
题目链接:BZOJ - 1055 题目分析 这种类似区间 DP 的记忆化搜索都是很相近的,比如字符串压缩和字符串扩展都差不多. 都是将现在 Solve 的区间分成子区间,再求解子区间. 这道题 Sol ...
- bzoj 3622 DP + 容斥
LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...
- [BZOJ 1055][HAOI2008]玩具取名(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1055 分析: 比较难想的dp f[i][j][c]表示i..j能否压缩成字符c 那么怎 ...
- bzoj 1055 [HAOI2008]玩具取名(区间DP)
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1258 Solved: 729[Submit][Statu ...
- BZOJ 1055 区间DP
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1144 Solved: 668[Submit][Statu ...
- BZOJ 1055 玩具取名(区间DP)
很显然的区间DP,定义dp[i][j][k], 如果dp[i][j][k]=1表示字符串[i,j]可以组成k字符. # include <cstdio> # include <cst ...
- Bzoj 1055 玩具取名(区间DP)
题面 题解 字符很麻烦,不妨用数字代替(比如1代表'W') const char c[5] = {0, 'W', 'I', 'N', 'G'}; 接着,像这种两个子串可以合并成另一个子串的题可以考虑区 ...
- bzoj 1055: [HAOI2008]玩具取名【区间dp】
不难想,就是处理起来比较麻烦 设f[i][j][k]为是否可以把区间(i,j)合并为k,初始状态是f[i][j][s[i]]=1,转移的话另一段枚举长度x,向(i-x,j),(i,j+x)转移 把四个 ...
随机推荐
- Union File System
目录 Union File System AUFS Docker是如何使用AUFS的 image layer 和 AUFS (docker版本不同可能会有区别,我的是在/var/lib/docker下 ...
- vue单文件中引用路径的处理
原文地址:vue单文件中引用路径的处理如有错误,欢迎指正! vue单文件的开发过程中,在单文件模版中可能会涉及到文件路径的处理,比如 <img>, style 中的 background ...
- 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)
这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...
- 别了WindowsXP
生命中有太多的迎来送往,今日全世界都在告别它. 虽然自己已经在很久之前没有用XP系统了.告别它不如在一定意义上告别自己的一段时光... 2001年个人第一台电脑...初次安装XP,两张光盘一张安装盘一 ...
- C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别
1 绝对路径与相对路径 绝对路径表示相对容易得多,依次将文件所在盘符文件夹逐级展开就是绝对路径: ofstream infile("E:\\MyDoc\\file.txt", io ...
- 作为一个程序员怎么通过android开发赚钱
上面是一个程序员通过Android开发每天的收入,信则有! 自己学安卓差不多,有一年了.我本来是从事javaweb开发的,可能学习安卓上手会快点.其实安卓没有那难 .首先开发安卓程序,要有一个,开 ...
- C语言之基本算法38—格式化输出10000以内的全部完数
//穷举法! /* ================================================================== 题目:求10000以内的全部完数,统计数量并以 ...
- 浅谈 trie树 及事实上现
定义:又称字典树,单词查找树或者前缀树,是一种用于高速检索的多叉树结构. 如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 核心思想:是空间换时间.利用字符串的公共前缀来减少查询时间的开 ...
- Linux 经常使用快捷键
桌面下: Alt+F5 取消最大化窗体 Alt+F9 最小化窗体 Alt+F10 最大化窗体 Alt+空格 打开窗体的控制菜单 (点击窗体左上角图标出现的菜单) ctl+r ...
- java9新特性-12-集合工厂方法:快速创建只读集合
1.官方Feature 269: Convenience Factory Methods for Collections 2.产生背景 要创建一个只读.不可改变的集合,必须构造和分配它,然后添加元素, ...