[BZOJ 1055] [HAOI2008] 玩具取名 【记忆化搜索】
题目链接:BZOJ - 1055
题目分析
这种类似区间 DP 的记忆化搜索都是很相近的,比如字符串压缩和字符串扩展都差不多。
都是将现在 Solve 的区间分成子区间,再求解子区间。
这道题 Solve(l, r, x) 求能否将 [l, r] 的区间还原成 x ,那么就将它分成两段,看是否能左段变成 p , 右段变成 q。 (x 能变成 pq)
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm> using namespace std; const int MaxL = 200 + 5; char Ch[5] = {'W', 'I', 'N', 'G'}; int len;
int n[5], f[MaxL][MaxL][5]; char S[MaxL]; bool Tr[5][5][5]; int Solve(int l, int r, int x) {
if (f[l][r][x] != 0) return f[l][r][x];
if (l == r) {
if (S[l] == Ch[x]) {
f[l][r][x] = 1; return 1;
}
else {
f[l][r][x] = -1; return -1;
}
}
for (int i = l; i <= r - 1; ++i) {
for (int j = 0; j < 4; ++j) {
for (int k = 0; k < 4; ++k) {
if (!Tr[x][j][k]) continue;
if (Solve(l, i, j) == 1 && Solve(i + 1, r, k) == 1) {
f[l][r][x] = 1; return 1;
}
}
}
}
f[l][r][x] = -1; return -1;
} int GetNum(char c) {
for (int i = 0; i < 4; ++i)
if (c == Ch[i]) return i;
return -1;
} int main()
{
for (int i = 0; i < 4; ++i) scanf("%d", &n[i]);
char cc[3];
for (int i = 0; i < 4; ++i) {
for (int j = 1; j <= n[i]; ++j) {
scanf("%s", cc);
Tr[i][GetNum(cc[0])][GetNum(cc[1])] = true;
}
}
scanf("%s", S + 1); len = strlen(S + 1);
bool Flag = false;
for (int i = 0; i < 4; ++i)
if (Solve(1, len, i) == 1) {
printf("%c", Ch[i]);
Flag = true;
}
if (!Flag) printf("The name is wrong!");
printf("\n");
return 0;
}
[BZOJ 1055] [HAOI2008] 玩具取名 【记忆化搜索】的更多相关文章
- Bzoj 1055: [HAOI2008]玩具取名 (区间DP)
Bzoj 1055: [HAOI2008]玩具取名 (区间DP) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间动态规划和可 ...
- 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]玩具取名(记忆化搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 题意: 思路:记忆化搜索. #include<iostream> #include ...
- [BZOJ 1055][HAOI2008]玩具取名(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1055 分析: 比较难想的dp f[i][j][c]表示i..j能否压缩成字符c 那么怎 ...
- [LUOGU] P4290 [BZOJ] 1055 [HAOI2008]玩具取名
题目描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母代 ...
- BZOJ 1055 HAOI2008 玩具取名 动态规划
题目大意:给定一个由'W','I','N','G'构成的字符串.给定一些规则.这些规则能够将两个字符合成为一个,比如"II"能够合成为'W',"WW"能够合成为 ...
- 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 1068] [SCOI2007] 压缩 【记忆化搜索】
题目链接:BZOJ - 1068 题目分析 这种记忆化搜索(区间 DP) 之前就做过类似的,也是字符串压缩问题,不过这道题稍微复杂一些. 需要注意如果某一段是 S1S1 重复,那么可以变成 M + S ...
随机推荐
- Cubieboard 开箱和入门 | Name5566 分类: cubieboard 2014-11-08 17:27 251人阅读 评论(0) 收藏
Cubieboard 开箱和入门 2014 年 01 月 29 日 by name5566 Categories: Computer Science, Cubieboard Hello Cubiebo ...
- [AngularJS + Webpack] Requiring Templates
With Angular, most of the time you're specifying a templateUrl for your directives and states/routes ...
- android 26 设置项目有多个入口Activity。
第一个activity package com.sxt.day04_11; import android.os.Bundle; import android.app.Activity; import ...
- Visual Studio 调试技巧 (二)-- 为中断设置条件
今天尽是干货.我们来讨论如何为中断设置条件吧. 就像习大大讲的精确扶贫一样,如果我们能很精确地,仅在需要的时候把断点命中,以查看这个时候的程序数据,我们就能显著地提高 Debug 的效率.为断点设置条 ...
- css培训(三)
优先级 z-index 不设置 或auto 非static z-index :0 : z-index:-1: opacity 与层叠上下 opacity:.9 对其影响 小于1值 不具备堆叠 ...
- Android 开发实践 ViewGroup 实现左右滑出窗口(一)
利用假期把以前做的东西总结整理一下,先从简单的开始吧.实现的效果是这样的: 做了个截屏动画,比例有点不对了,凑合着看吧. 整个窗口有3部分组成,中间的主界面是个列表,左边的滑出界面是个菜单,右边的 ...
- jQuery作用
jquery是前端里面比较总要的,是很强大的一个选择器. 表单: 1.$(":input") 查找所有的input元素 2.$("text") 匹配所有的 ...
- js substr和substring字符串截取
substr(start,length)第一个参数是开始位置(注:start的开始是从0开始,看到好多博客上面是从1开始,在火狐和谷歌执行了一下是从0开始),第二个参数是截取字符串的长度(可以省略,表 ...
- Unity3D 相机跟随主角移动
这里给主相机绑定一个脚本. 脚本写为: using UnityEngine; using System.Collections; public class camerafollow : MonoBeh ...
- .net 学习路线感想
从上到大学到现在工作,已经有六年多了,发现学习编程到以开发为工作也是一个挺长的过程的. 大学中,从c语言到java.C#到其他各种语言的学习,还有其他知识的学习如:数据库(oracle.sql Ser ...