\(\\\)

\(Description\)


在一个只有\(W,I,N,G\)的字符集中,给出四个字符的若干映射,每个映射为一个字符映射到两个字符,现给你一个假定由一个字符经过多次映射产生的字符串,问将其还原成一个字符,可以还原成四类字符的哪几个。

  • 每个字符的映射集合大小不超过\(16\),给出的映射后字符串长度不超过\(200\)

\(\\\)

\(Solution\)


  • 注意到每次是两个字符合成一个字符,不妨考虑每一个字符合成的过程。

  • 可达性\(DP\)。设\(f[i][j][k]=0/1\)表示闭区间\([i,j]\)能否合成一个字符\(k\),显然边界有\(f[i][i][num[i]]=1\)

  • 转移就是基本的区间\(DP\)的形式,枚举长度,端点,检查左右两端能否合并即可。

基本形式知道了做题还是不会往题上套 看来姿势还是要速度涨起来

\(\\\)

\(Code\)


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 210
#define R register
#define gc getchar
using namespace std; inline int rd(){
int x=0; bool f=0; char c=gc();
while(!isdigit(c)){if(c=='-')f=1;c=gc();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return f?-x:x;
} char s[N];
bool f[N][N][4];
int n[4],tot,num[N],trs[4][20][2]; inline int fuc(char x){
return (x=='W'?0:(x=='I'?1:(x=='N'?2:3)));
} int main(){
for(R int i=0;i<=3;++i) n[i]=rd();
char c=gc();
for(R int i=0;i<=3;++i)
for(R int j=1;j<=n[i];++j){
while(!isupper(c)) c=gc();
trs[i][j][0]=fuc(c);
trs[i][j][1]=fuc(gc()); c=gc();
}
while(!isupper(c)) c=gc();
num[1]=fuc(c);
scanf("%s",s);
int slen=strlen(s);
for(R int i=0;i<slen;++i) num[tot=(2+i)]=fuc(s[i]);
for(R int i=1;i<=tot;++i) f[i][i][num[i]]=1;
for(R int len=1;len<=tot;++len)
for(R int l=1,r;l<=tot-len+1;++l){
r=l+len-1;
for(R int k=l;k<r;++k)
for(R int i=0;i<=3;++i)
for(R int j=1;j<=n[i];++j)
f[l][r][i]|=f[l][k][trs[i][j][0]]&&f[k+1][r][trs[i][j][1]];
}
bool fl=0;
for(R int i=0;i<=3;++i) if(f[1][tot][i])fl=1;
if(!fl){puts("The name is wrong!");return 0;}
if(f[1][tot][0]) printf("W");
if(f[1][tot][1]) printf("I");
if(f[1][tot][2]) printf("N");
if(f[1][tot][3]) printf("G");
return 0;
}

[ HAOI 2008 ] 玩具取名的更多相关文章

  1. BZOJ1055: [HAOI2008]玩具取名[区间DP]

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

  2. BZOJ1055: [HAOI2008]玩具取名

    ... #include<bits/stdc++.h> using namespace std; int q[255]; char s[205]; char p[]={'W','I','N ...

  3. 【BZOJ-1055】玩具取名 区间DP

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

  4. 【BZOJ】【1055】【HAOI2008】玩具取名

    区间DP/记忆化搜索 sigh……看了提示才想到是区间DP >_>我果然还是太弱 f[l][r][k]表示L到R这段区间能否合并成K,那么就是枚举拆分方案(从哪里断开)和组合方式(左半合成 ...

  5. BZOJ 1055 [HAOI2008]玩具取名

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

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

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

  7. 【BZOJ1055】[HAOI2008]玩具取名(动态规划)

    [BZOJ1055][HAOI2008]玩具取名(动态规划) 题面 BZOJ 洛谷 题解 裸的区间\(dp\),设\(f[i][j][W/I/N/G]\)表示区间\([i,j]\)能否由某个字母替换过 ...

  8. bzoj千题计划199:bzoj1055: [HAOI2008]玩具取名

    http://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间DP dp[i][j][k] 表示区间[i,j]能否合成k #include<cst ...

  9. 【BZOJ1055】[HAOI2008]玩具取名(区间DP)

    [HAOI2008]玩具取名 题目描述 某人有一套玩具,并想法给玩具命名.首先他选择\(WING\)四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用" ...

随机推荐

  1. JavaSE 学习笔记之API(二十一)

    API--- java.lang.Runtime: 类中没有构造方法,不能创建对象. 但是有非静态方法.说明该类中应该定义好了对象,并可以通过一个static方法获取这个对象.用这个对象来调用非静态方 ...

  2. 网线切割&切绳子

    题目描述 Wonderland居民决定举行一届地区性程序设计大赛.仲裁委员会志愿负责这次赛事并且保证会组织一次有史以来最公正的比赛.为此,所有参赛者的电脑和网络中心会以星状网络连接,也就是说,对每个参 ...

  3. 洛谷—— P2049 魔术棋子

    https://www.luogu.org/problem/show?pid=2049 题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中 ...

  4. [bzoj 2463]谁能赢呢?(博弈论)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2463 分析:因为都是按最优策略,所以棋盘肯定都能走满,于是胜负关系就是判断n*n的奇偶 ...

  5. LVS 源代码分析

    http://blog.chinaunix.net/uid/11207493.html http://zh.linuxvirtualserver.org/blog/3309

  6. java中POJO类和DTO类都要实现序列化

    java中POJO类和DTO类都要实现序列化 java中POJO类和DTO类都要实现序列化 java中POJO类和DTO类都要实现序列化 序列化:序列化是将对象转换为容易传输的格式的过程.例如,可以序 ...

  7. VS2017-NetCore项目整合Log4Net

    1新建NetCore项目,我这里NetCoreSDK版本是2.2.0. 2.进入NuGet程序包官网 : https://www.nuget.org,搜索以下两个包并安装到项目中. Microsoft ...

  8. shell apt install 按tab键自动补全

    insert if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi to ~/.bashrc

  9. 数学之路-python计算实战(1)-ubuntu安装pypy

    Get the source code. The following packages contain the source at the same revision as the above bin ...

  10. Hadoop Yarn(一)—— 单机伪分布式环境安装

    HamaWhite(QQ:530422429)原创作品,转载请注明出处:http://write.blog.csdn.net/postedit/40556267. 本文是依据Hadoop官网安装教程写 ...