BZOJ 1055 HAOI2008 玩具取名 动态规划
题目大意:给定一个由‘W','I','N','G'构成的字符串。给定一些规则。这些规则能够将两个字符合成为一个,比如"II"能够合成为'W',"WW"能够合成为'I'或者'N'
求这个字符串能够终于合成为哪几种字符
看到这题我想到了广搜。
。。事实上不是必需,动归全然能够解决
令f[i][j][k]为从i開始的j个字符能否够合成为字符[k]
然后j从外层循环。剩下的所有预处理,怎么暴力怎么转移。我写了六层循环,有点吓人
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 210
using namespace std;
int n,W,I,N,G;
int trans[4][4][4];
bool f[M][M][4],flag;
char s[M],table[5]="WING";
inline int GetInt(char c)
{
switch(c)
{
case 'W':return 0;
case 'I':return 1;
case 'N':return 2;
case 'G':return 3;
}
}
inline void Input(int p)
{
int x,y;
char c[2];
scanf("%s",c);
x=GetInt(c[0]);
y=GetInt(c[1]);
trans[x][y][p]=1;
}
int main()
{
int i,j,k,c1,c2,c3;
cin>>W>>I>>N>>G;
for(i=1;i<=W;i++)
Input(0);
for(i=1;i<=I;i++)
Input(1);
for(i=1;i<=N;i++)
Input(2);
for(i=1;i<=G;i++)
Input(3);
scanf("%s",s+1);
n=strlen(s+1);
for(i=1;i<=n;i++)
f[i][1][ GetInt(s[i]) ]=1;
for(j=2;j<=n;j++)
for(i=1;i+j-1<=n;i++)
for(k=i;k<i+j-1;k++)
for(c1=0;c1<4;c1++)
if(f[i][k-i+1][c1])
for(c2=0;c2<4;c2++)
if(f[k+1][i+j-1-k][c2])
for(c3=0;c3<4;c3++)
if(trans[c1][c2][c3])
f[i][j][c3]=1;
for(i=0;i<4;i++)
if(f[1][n][i])
flag=1,putchar(table[i]);
if(!flag)
puts("The name is wrong!");
}
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] 玩具取名 【记忆化搜索】
题目链接:BZOJ - 1055 题目分析 这种类似区间 DP 的记忆化搜索都是很相近的,比如字符串压缩和字符串扩展都差不多. 都是将现在 Solve 的区间分成子区间,再求解子区间. 这道题 Sol ...
- [BZOJ 1055][HAOI2008]玩具取名(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1055 分析: 比较难想的dp f[i][j][c]表示i..j能否压缩成字符c 那么怎 ...
- BZOJ 1055: [HAOI2008]玩具取名(记忆化搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 题意: 思路:记忆化搜索. #include<iostream> #include ...
- [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 ...
随机推荐
- python程序的编辑和运行、变量
第一个python程序 python是解释型弱类型高级语言 常见的python解释器CPython.IPython.pypy.JPython.IronPython 方法一.python程序可以写在命令 ...
- 【转】C# WinForm中的Label如何换行
第一种是把Label的AutoSize属性设为False,手动修改Label的大小.这样的好处是会因内容的长度而自动换行,但是当内容的长度超过所设定的大小时,多出的内容就会无法显示.因此,这种方法适合 ...
- HTML中pre标签的用法
我们经常会在要保持文本格式的时候使用pre标签,比如当我们要展示源代码的时候,只要放一个pre标签,然后把源代码直接复制,粘贴,然后在页面上就可以保持好格式.不会像放在其它标签里那样,把换行和空格都自 ...
- Java中的反射--Reflect
在张孝祥老师的Java讲解中,学习到了Java反射的一部分知识,觉得有必要好好学习一下哈. 一.反射的理解 经典总结:反射就是把Java类中的各种成分映射成为相应的Java类 例如:一个Java类中用 ...
- mysql中ibatis的limit动态传参
param.put("pageNo",pageNo); param.put("pageSize",pageSize); sqlMap中的用法 limit $ ...
- java值的传递
public class Example { String str = new String("good"); char[] ch = {'a','b','c'}; public ...
- css 给div 添加滚动条样式hover 效果
css .nui-scroll { margin-left: 100px; border: 1px solid #000; width: 200px; height: 100px; ...
- MariaDB数据库(二)
1. MariaDB数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行,尽量使用范围小的,而不用大的. 1.1 常用的数据类型 整数:int,bit ...
- for、while循环
for循环 # for 循环后面可以对Iterable或者Iterator进行遍历 # "abc"和[1,2,3]为可迭代对象,range(4)为迭代器 for i in &quo ...
- cenos6.5作为网关
入口服务器(网关服务器)关闭selinuxsetenforce 0vim /etc/selinux/config将SELINUX=enforcing改为SELINUX=disabled 修改防火墙ip ...