【HAOI2008】玩具命名
水题大失败
原题:
某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。
现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的。
第一行四个整数W、I、N、G。表示每一个字母能由几种两个字母所替代。
接下来W行,每行两个字母,表示W可以用这两个字母替代。
接下来I行,每行两个字母,表示I可以用这两个字母替代。
接下来N行,每行两个字母,表示N可以用这两个字母替代。
接下来G行,每行两个字母,表示G可以用这两个字母替代。
最后一行一个长度不超过Len的字符串。表示这个玩具的名字
如果给的名字不能由任何一个字母变形而得到则输出“The name is wrong!”
Len<=200,W、I、N、G<=16
因为之前水了几道HAOI的题,所以这次想了想直接开始码dfs,然后呵呵
然后上网搜题解了……
然后发现是区间DP,然后就又很水了……
用f[i][j][k]表示从i到j可以变成k
区间DP即可
注意无解
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int mf[]; char _f[];
int b[]; bool a[][][];
int t[],lt=; char _t[];
bool f[][][];
int main(){//freopen("ddd.in","r",stdin);
memset(f,,sizeof(f));
memset(a,,sizeof(a));
mf['W']=,mf['I']=,mf['N']=,mf['G']=;
for(int i=;i<=;i++) cin>>b[i];
for(int k=;k<=;k++)
for(int i=;i<=b[k];i++){
char _ch=getchar(); while(_ch!='W'&&_ch!='I'&&_ch!='N'&&_ch!='G')_ch=getchar();
a[k][mf[_ch]][mf[getchar()]]=true;
}
scanf("%s",_t+); lt=strlen(_t+);
for(int i=;i<=lt;i++){ t[i]=mf[_t[i]]; f[t[i]][i][i]=true;}
/*for(int i=1;i<lt;i++)
for(int j=1;j<=4;j++)
f[j][i][i+1]=a[j][t[i]][t[i+1]];*/
for(int l=;l<=lt;l++)
for(int i=;i<=lt-l+;i++){
int j=i+l-;
for(int h=i;h<=j-;h++)
for(int p=;p<=;p++)if(f[p][i][h])
for(int q=;q<=;q++)if(f[q][h+][j])
for(int k=;k<=;k++)if(a[k][p][q])
f[k][i][j]=true;
}
_f[]='W',_f[]='I',_f[]='N',_f[]='G';
bool flag=false;
for(int i=;i<=;i++)if(f[i][][lt]) cout<<_f[i],flag=true;
if(!flag) cout<<"The name is wrong!"<<endl;
cout<<endl;
return ;
}
【HAOI2008】玩具命名的更多相关文章
- [haoi2008]玩具命名
某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很 ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- BZOJ1055: [HAOI2008]玩具取名
... #include<bits/stdc++.h> using namespace std; int q[255]; char s[205]; char p[]={'W','I','N ...
- BZOJ 1055 [HAOI2008]玩具取名
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1119 Solved: 653[Submit][Statu ...
- bzoj 1055 [HAOI2008]玩具取名(区间DP)
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1258 Solved: 729[Submit][Statu ...
- bzoj千题计划199:bzoj1055: [HAOI2008]玩具取名
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间DP dp[i][j][k] 表示区间[i,j]能否合成k #include<cst ...
- 【BZOJ1055】[HAOI2008]玩具取名(区间DP)
[HAOI2008]玩具取名 题目描述 某人有一套玩具,并想法给玩具命名.首先他选择\(WING\)四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用" ...
- DP【洛谷P4290】 [HAOI2008]玩具取名
P4290 [HAOI2008]玩具取名 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"WI ...
- 【bzoj1055】[HAOI2008]玩具取名
[bzoj1055][HAOI2008]玩具取名 2014年12月1日3,0111 Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名 ...
随机推荐
- PHP消息队列之Beanstalk
Beanstalk,一个高性能.轻量级的分布式内存队列
- Interactive Reporting , SQL*Net not loaded successfully 问题的解决。
.bashrc 什么的,早就把 TNS_ADMIN , 和 LD_LIBRARY_PATH 加进去了,可就是不好使. 终极方法还是在 workspace 的 R&A -> Service ...
- Assert.IsNotNull 方法(判断对象不为NULL)
Assert.IsNotNull 方法 Visual Studio 2012 其他版本 Visual Studio 2010 Visual Studio 2008 Visual Studio 20 ...
- week 1
day1 订正 学习AC自动机 day2 mobius反演 对偶图 codeforces day3 ZR模拟赛 订正 day4 复习AC自动机 题库 https://www.cnblogs.com/c ...
- Tree CodeForces - 1111E (树,计数,换根)
大意: 给定树, 多组询问, 每个询问给出一个点集$S$, 给定$m, r$, 求根为$r$时, $S$的划分数, 满足 每个划分大小不超过$m$ 每个划分内不存在一个点是另一个点的祖先 设点$x$的 ...
- layedit
layedit.set({ uploadImage: { url: '' //接口url ,type: '' //默认post } }); //注意:layedit.set 一定要放在 build 前 ...
- 想3分钟搭建图像识别系统?这里有一份TensorFlow速成教程(转)
http://www.voidcn.com/article/p-wyaahqji-dr.html 从我们见到的各种图像识别软件来看,机器似乎能认出人脸.猫.狗.花草.各种汽车等等日常生活中出现的物体, ...
- 『科学计算』通过代码理解SoftMax多分类
SoftMax实际上是Logistic的推广,当分类数为2的时候会退化为Logistic分类 其计算公式和损失函数如下, 梯度如下, 1{条件} 表示True为1,False为0,在下图中亦即对于每个 ...
- 『cs231n』线性分类器损失函数
代码部分 SVM损失函数 & SoftMax损失函数: 注意一下softmax损失的用法: SVM损失函数: import numpy as np def L_i(x, y, W): ''' ...
- from * import *(ImportError: No module named *)为什么报错没有这个目录
先说下from * import * 的原理:比如有路径D:\fanbingbing\ai\wo.py这么一个文件,而现在你在D:\fanbingbing\buai\ni.py(别介意这么比喻..(⊙ ...