这道题很明显是区间DP。

为了方便表示,我们可以将‘W’、‘I’、‘N’、‘G’分别设为1、2、3、4。

另外,DP可能有点丑,记忆化搜索可能写起来更容易理解。

AC代码:

#include <bits/stdc++.h>

using namespace std;//使用标准名字空间

inline int read()//快速读入
{
int f=1,x=0;
char c=getchar(); while(c<'0' || c>'9')
{
if(c=='-')f=-1;
c=getchar();
} while(c>='0' && c<='9')
{
x=x*10+c-'0';
c=getchar();
} return f*x;
} string s;
int b[5][5][5],dp[210][210][5],p[130],d[5],len,fl;//定义变量 int main()
{
p['W']=1,p['I']=2,p['N']=3,p['G']=4;//将字母表示成数字 for(register int i=1; i<=4; i++)//输入
{
d[i]=read();
} for(register int i=1; i<=4; i++)
{
for(register int j=1; j<=d[i]; j++)
{
cin>>s;//输入每个字母可以代表的子字符串 b[p[s[0]]][p[s[1]]][i]=1;//标记这个字符串由i演变而来
}
} cin>>s;//输入玩具名称 len=s.size();//记录名称长度 for(register int i=0; i<len; i++)
{
dp[i][i][p[s[i]]]=1;//标记第i个位置
}
//开始DP主过程
for(register int i=len-1; i>=0; i--)
{
for(register int j=i+1; j<len; j++)//枚举区间(i,j)
{
for(register int k=1; k<5; k++)//枚举字母
{
for(register int l=1; l<5 && dp[i][j][k]==0; l++)//如果(i,j)不含有字母k,就枚举字母l
{
for(register int o=1; o<5 && dp[i][j][k]==0; o++)//同理
{
if(b[l][o][k]==0)//如果字母组合(l,o)不能由字母k演变来
{
continue;//就继续循环
} for(register int w=i; w<j && dp[i][j][k]==0; w++)
{
dp[i][j][k]|=(dp[i][w][l] & dp[w+1][j][o]);//主要DP步骤,要仔细体会
}
}
}
}
}
}
//输出
if(dp[0][len-1][1])
{
cout<<'W';
fl=1;
} if(dp[0][len-1][2])
{
cout<<'I';
fl=1;
} if(dp[0][len-1][3])
{
cout<<'N';
fl=1;
} if(dp[0][len-1][4])
{
cout<<'G';
fl=1;
}
//无解输出
if(fl==0)
{
cout<<"The name is wrong!";
} return 0;//完美结束
}

题解 【洛谷P4290】 [HAOI2008]玩具取名的更多相关文章

  1. 洛谷 P4290 [HAOI2008]玩具取名

    传送门 思路 博客半年没更新了,来更新个博文吧 在\(dsr\)聚聚博客的帮助下,我用半个上午和一个中午的时间苟延残喘地完成了这道题 先是读题目读大半天,最后连个样例都看不懂 之后又是想思路,实在想不 ...

  2. 洛谷 4290 [HAOI2008]玩具取名 题解

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

  3. bzoj1055 ||P4290 [HAOI2008]玩具取名

    目录 链接 思路 代码 链接 luogu bzoj 思路 区间dp 然后\(f[i][j][k]\) 区间\([i,j]\)能否变成\(k\)字符 (字符当然得转化一下) 字符的个数不多,直接暴力\( ...

  4. P4290 [HAOI2008]玩具取名

    传送门 $dp$ 设 $f[i][j][k]$ 表示初始为 $k$ 时,能否得到 $[i,j]$ 这一段子串 设 $pd[i][j][k]$ 表示长度为二的字符串 $ij$ 能否由 $k$ 得到 然后 ...

  5. DP【洛谷P4290】 [HAOI2008]玩具取名

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

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

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

  7. BZOJ 1055 [HAOI2008]玩具取名

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

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

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

  9. 【bzoj1055】[HAOI2008]玩具取名

    [bzoj1055][HAOI2008]玩具取名 2014年12月1日3,0111 Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名 ...

  10. bzoj1055: [HAOI2008]玩具取名(dp)

    1055: [HAOI2008]玩具取名 题目:传送门 简要题意: 就是固定四个字母,给出这四个字母分别可以由哪两个字母组成,然后在给你一个字符串,要求把这个字符串还原成原始的四个字母的其中一个. 题 ...

随机推荐

  1. map/reduce+lambda让程序简单化

    map()函数 map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 也就是  map(f,[x,x,x, ...

  2. ovs安装教程

    原文链接:https://www.cnblogs.com/goldsunshine/p/10331606.html Open vSwitch系列之二 安装指定版本ovs   Open vSwitch系 ...

  3. 一个简易git服务器的搭建

    查看本机ssh公钥,生成公钥 查看ssh公钥方法: 1. 打开git bash窗口 2. 进入.ssh目录: cd ~/.ssh 3. 找到id_rsa.pub文件: ls 4. 查看公钥:cat i ...

  4. 简单scrapy爬虫实例

    简单scrapy爬虫实例 流程分析 抓取内容:网站课程 页面:https://edu.hellobi.com 数据:课程名.课程链接及学习人数 观察页面url变化规律以及页面源代码帮助我们获取所有数据 ...

  5. 牛客CSP-S提高组赛前集训营3 赛后总结

    货物收集 二分答案.复杂度\(O(n\log n)\). 货物分组 用费用提前计算的思想,考虑用一个新的箱子来装货物会发生什么. 显然费用会加上后面的所有货物的总重. \(60\)分的\(O(n^2) ...

  6. 小I的小姐姐

    小 I 的小姐姐 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 小 I 去天津玩啦,一路上,他跟他的同学发生了许多有趣 ...

  7. Wannafly Camp 2020 Day 1C 染色图 - 组合数学,整除分块

    定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任何一条边 (u,v),都有 f(u)≠f(v). 定义函数 g(n,k) 的值为所有包 ...

  8. eclipse如何查看源码

    方式一: Source not found The JAR file X:\xxxx\xxxx\xxxx\xx has no source attachment. 没有源附件. You can att ...

  9. 关于List比较好玩的操作

    作为Java大家庭中的集合类框架,List应该是平时开发中最常用的,可能有这种需求,当集合中的某些元素符合一定条件时,想要删除这个元素.如: public class ListTest { publi ...

  10. react 渲染

    目录 React渲染 createElement的三个参数 element如何生成真实节点 ReactDOMComponent 作用 ReactCompositeComponentWrapper 作用 ...