bzoj 1055 [HAOI2008]玩具取名(区间DP)
1055: [HAOI2008]玩具取名
Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1258  Solved: 729
[Submit][Status][Discuss]
Description
某
人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用
“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的。
Input
第
一行四个整数W、I、N、G。表示每一个字母能由几种两个字母所替代。接下来W行,每行两个字母,表示W可以用这两个字母替代。接下来I行,每行两个字
母,表示I可以用这两个字母替代。接下来N行,每行两个字母,表示N可以用这两个字母替代。接下来G行,每行两个字母,表示G可以用这两个字母替代。最后
一行一个长度不超过Len的字符串。表示这个玩具的名字。
Output
一行字符串,该名字可能由哪些字母变形而得到。(按照WING的顺序输出)如果给的名字不能由任何一个字母变形而得到则输出“The name is wrong!”
Sample Input
II
WW
WW
IG
IIII
Sample Output
HINT
W可以变成II所以IIII可以缩成WW IN均能变成WW所以WW又可以缩成I或者N 所以最终答案应该按照“WING”的顺序输出IN
[数据范围]
100%数据满足Len<=200,W、I、N、G<=16
Source
【思路】
区间DP。
设f[l][r][x]表示lr区间的字符是否可以合并为字符x,则有转移方程式:
f[l][r][x]=f[l][j][p1]&&f[j+1][r][p2],l <= j < r
其中p1 p2表示x可以差分成的两个字符。
ps:没错我就是在水题 _(:з」∠)_
【代码】
#include<cstdio>
#include<cstring>
#define FOR(a,b,c) for(int a=(b);a<(c);a++)
using namespace std; const int maxn = +;
int d[maxn][maxn][];
char s[]="WING";
int h[]; char a[][maxn][],expr[maxn];
int num[],n; int dp(int l,int r,int x) {
if(l==r) return expr[l]==s[x];
int &ans=d[l][r][x];
if(ans>=) return ans;
FOR(i,,num[x]) FOR(j,l,r)
if(dp(l,j,h[a[x][i][]]) && dp(j+,r,h[a[x][i][]])) return ans=;
return ans=;
} int main() {
memset(d,-,sizeof(d));
h['W']= , h['I']= , h['N']= , h['G']=;
FOR(i,,) scanf("%d",&num[i]);
FOR(i,,) FOR(j,,num[i])
scanf("%s",a[i][j]);
scanf("%s",expr);
int n=strlen(expr) , flag=;
FOR(i,,) if(dp(,n-,i))
flag= , printf("%c",s[i]);
if(!flag) puts("The name is wrong!");
return ;
}
bzoj 1055 [HAOI2008]玩具取名(区间DP)的更多相关文章
- 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:808/JudgeOnline/problem.php?id=1055 分析: 比较难想的dp f[i][j][c]表示i..j能否压缩成字符c 那么怎 ... 
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
		1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ... 
- BZOJ 1055 [HAOI2008]玩具取名
		1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1119 Solved: 653[Submit][Statu ... 
- [BZOJ 1055] [HAOI2008] 玩具取名 【记忆化搜索】
		题目链接:BZOJ - 1055 题目分析 这种类似区间 DP 的记忆化搜索都是很相近的,比如字符串压缩和字符串扩展都差不多. 都是将现在 Solve 的区间分成子区间,再求解子区间. 这道题 Sol ... 
- [LUOGU] P4290 [BZOJ] 1055 [HAOI2008]玩具取名
		题目描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母代 ... 
- bzoj 1055: [HAOI2008]玩具取名【区间dp】
		不难想,就是处理起来比较麻烦 设f[i][j][k]为是否可以把区间(i,j)合并为k,初始状态是f[i][j][s[i]]=1,转移的话另一段枚举长度x,向(i-x,j),(i,j+x)转移 把四个 ... 
- 【BZOJ】1055: [HAOI2008]玩具取名(dp)
		http://www.lydsy.com/JudgeOnline/problem.php?id=1055 我竟然都没往dp这个方向想.....百度了下看到标题是dp马上就会转移了QAQ... 设d[i ... 
- BZOJ 1055: [HAOI2008]玩具取名(记忆化搜索)
		http://www.lydsy.com/JudgeOnline/problem.php?id=1055 题意: 思路:记忆化搜索. #include<iostream> #include ... 
随机推荐
- U3D 实现地面碰撞效果
			前面讲了如何让两个刚体碰撞: 现在来细细讲解一下, 首先,精灵刚体后就好比物理世界的物体,是受到重力所用的, 然后两个物体要添加碰撞系数才能实现碰撞, 这种情况下,碰撞后会使得另一个刚体也会随之运动, ... 
- 用JS实现AJAX
			用JS实现AJAX 准备工作:新建网站,建立两个页面,index.aspx和backstage.aspx, 在工程目录下新建一个文件夹命名和image,在这里添加一个loading.gif,模拟提 ... 
- 【转】IOS 30多个iOS常用动画,带详细注释
			原文: http://blog.csdn.net/zhibudefeng/article/details/8691567 CoreAnimationEffect.h 文件 // CoreAnimati ... 
- 在Mac OS上搭建本地服务器
			我们在做网络编程的时候一般是需要有网络环境的,这样可以边写边测试达到很高的效率.但有些时候我们由于很多原因我们的电脑无法连接到网络,这时就会感觉很不自在,所以今天在这里教大家怎么用自己电脑作服务器. ... 
- 连接池dbcp  pool
			-package cn.gdpe.pool; import java.io.InputStream;import java.sql.Connection;import java.sql.Prepare ... 
- windows core audio apis
			这个播放流程有一次当初不是很理解,做个记录,代码中的中文部分,原文档是有解释的:To move a stream of rendering data through the endpoint buff ... 
- 【实习记】2014-08-10(上)代码跟踪git的想法+归并排序的debug过程
			(冒泡,选择,插入,希尔,快速,归并,堆排)周末加班学习C++,打算用C++写七大经典排序代码.发现3个月前自己写的七大经典排序代码(C Language)突然运行出错. Makefile内容 ... 
- eclipse中show whitespace characters显示代码空格,TAB,回车 导致代码乱恶心
			Eclipse中show whitespace characters显示回车.空格符. 取消此功能的第二种方式: 
- php之利用递归写无限极分类
			<?php //无限极分类 //parent 的值,是该栏目的父栏目的id 反之是 /*0 安徽 合肥 北京 海淀 中关村 上地 河北 石家庄 */ $area = array( array(' ... 
- Java初试
			另外在Java语言的代码内部书写文件路径时,需要注意大小写,大小写需要保持一致,路径中的文件夹名称区分大小写.由于’\’是Java语言中的特殊字符,所以在代码内部书写文件路径时,例如代表“c:\tes ... 
