1055: [HAOI2008]玩具取名
Description
Input
Output
Sample Input
II
WW
WW
IG
IIII
Sample Output
HINT
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
using namespace std;
int m,n,a,b,ans,c,d,q,r,w[][];
char ch1,ch2;
bool f[][][];
string s,s1;
int main()
{
cin>>a>>b>>c>>d;
for (int i=;i<=a+b+c+d;i++)
//这里我们用一个w数组来储存读入的元素,举个例子,现在w可转换为IG,那么w[i][1]储存I,w[i][2]储存G,w[i][3]则储存w,i的取值由这两个字母是第几个被输入的决定。
if (i>a+b+c) w[i][]=;
else if (i>a+b) w[i][]=;
else if (i>a) w[i][]=;
else w[i][]=;
cin>>s1;
ch1=s1[];
ch2=s1[];
if (ch1=='W') w[i][]=; else if (ch1=='I') w[i][]=;else if (ch1=='N') w[i][]=;else if (ch1=='G') w[i][]=;
if (ch2=='W') w[i][]=; else if (ch2=='I') w[i][]=;else if (ch2=='N') w[i][]=;else if (ch2=='G') w[i][]=;
}
cin>>s;
n=s.size();
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
for (int k=;k<=;k++)
f[i][j][k]=false; //f[i][j][k]表示这段区间内能否由k转换而来。先全都初始化。
for (int i=;i<=n-;i++)//原先序列中有的先赋值为true,i从0开始是因为c++中字符串中的第一个字符储存在0号位中。
{
if (s[i]=='W') f[i+][i+][]=true;
else if (s[i]=='I') f[i+][i+][]=true;
else if (s[i]=='N') f[i+][i+][]=true;
else if (s[i]=='G') f[i+][i+][]=true;
}
for (int len=;len<=n;len++)//枚举区间长度
for (int i=;i<=n-len+;i++)//区间左边
{
r=i+len-;//区间右边
m=i;//我们通过m把区间分为两部分
while (m<=r-)//枚举m
{
for (int k=;k<=a+b+c+d;k++)//枚举那些转换公式
f[i][r][w[k][]]=(f[i][m][w[k][]])&&(f[m+][r][w[k][]])||(f[i][r][w[k][]]); //核心部分,我们去判断由m分开的区间左部分和右部分,是否刚好可以转换成w[k]这个公式的左边字母和右边字母,(即两边都为TRUE)
若可以,那么这个区间就可以是w[k][3]中的字母转换而来,赋值为TRUE。
m+=;
}
}
ans=;
for (int i=;i<=;i++)
if (f[][n][i]==true) //按顺序输出
{
if (i==) printf("W");
if (i==) printf("I");
if (i==) printf("N");
if (i==) printf("G");
ans+=;//记录是否有答案
}
if (ans==) printf("The name is wrong!");//没答案
return ;
}
唔,复杂度是O(200^3*64),不知是因为实际上没有200^3,还是数据水,还是写着10s的原因,很险地过了。。。。
1055: [HAOI2008]玩具取名的更多相关文章
- 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 1055: [HAOI2008]玩具取名 (区间DP)
Bzoj 1055: [HAOI2008]玩具取名 (区间DP) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间动态规划和可 ...
- 【BZOJ】1055: [HAOI2008]玩具取名(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 我竟然都没往dp这个方向想.....百度了下看到标题是dp马上就会转移了QAQ... 设d[i ...
- [BZOJ 1055][HAOI2008]玩具取名(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1055 分析: 比较难想的dp f[i][j][c]表示i..j能否压缩成字符c 那么怎 ...
- 1055: [HAOI2008]玩具取名 - BZOJ
Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使 ...
- [BZOJ 1055] [HAOI2008] 玩具取名 【记忆化搜索】
题目链接:BZOJ - 1055 题目分析 这种类似区间 DP 的记忆化搜索都是很相近的,比如字符串压缩和字符串扩展都差不多. 都是将现在 Solve 的区间分成子区间,再求解子区间. 这道题 Sol ...
- BZOJ 1055: [HAOI2008]玩具取名(记忆化搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 题意: 思路:记忆化搜索. #include<iostream> #include ...
- 1055. [HAOI2008]玩具取名【区间DP】
Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替, ...
随机推荐
- DELPHI高性能大容量SOCKET并发(九):稳定性问题解决
http://blog.csdn.net/sqldebug_fan/article/details/9043699
- uva 10340 All in All
水题,从头到尾扫一遍就可以了,输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s.例如,abcde可以得到bce,但无法得到dc. #include<a ...
- 苹果刷机相关开源代码(如iRecovery等)收集汇总(不断更新中...)
下面截图是在下面开源代码下使用VS2015修改部分代码后适配而成,可以在Windows平台上运行, 下载连接: http://pan.baidu.com/s/1i4zKGx3.
- C# 數據事務操作
public sealed class SQLFunc { #region Methods #region OpenConnection /// <summary>指定包含連接字串的字串 ...
- 第五百七十七天 how can I 坚持
今天看了个电影<七月与安生>,挺不错,周冬雨,马思纯,然后就突然有了个想法,过年不回家了,去趟拉萨,或许只是想想吧,不知道有没有勇气去啊,何况是自己一个人,但是又想,旅行要是没点冒险的话, ...
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
问题描述:在使用mybatis进行多表联合查询时,如果两张表中的字段名称形同,会出现无法正常映射的问题. 问题解决办法:在查询时,给重复的字段 起别名,然后在resultMap中使用别名进行映射. 给 ...
- 【转】Java日期计算之Joda-Time
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成. http:// ...
- 直接使用docker而无须加sudo
从0.5.2开始docker的守护进程总是以root用户来运行.docker守护进程绑定的是Unix的socket而不是一个TCP端口.Unix的socket默认属于root用户,所以,使用docke ...
- easyui里弹窗的两种表现形式
easyui里弹窗的两种表现形式 博客分类: jQueryEasyUi 1.主JSP页面中描绘弹窗 <div id="centerDiv" data-options= ...
- WCF学习第一天
WCF 设计目标 : 1:生产效率 : 统一了现有的各种分布式技术 基于属性(Attribute)的开发 ...