P4290 [HAOI2008]玩具取名

某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。

现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的。

很早以前的考试题。

DP。

重点在预处理出每个区间能否凑成一个字母。

很简单,枚举断点即可。

code:

#include <iostream>
#include <cstdio>
#include <map>
#include <cstring> using namespace std; const int wx=251; map<char,int> m; inline int read(){
int sum=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0'; ch=getchar();}
return sum*f;
} int f[wx][wx];
int zmj[wx][wx][wx];
int a[wx],flag[wx];
int ok1[wx],ok2[wx],ok3[wx];
char c[wx];
int tot; int main(){
m['W']=1; m['I']=2; m['N']=3; m['G']=4;
for(int i=1;i<=4;i++)a[i]=read();
for(int i=1;i<=4;i++){
for(int j=1;j<=a[i];j++){
scanf("%s",c+1);
ok1[++tot]=m[c[1]];
ok2[tot]=m[c[2]];
ok3[tot]=i;
}
}
scanf("%s",c+1); int n=strlen(c+1);
for(int i=1;i<=n;i++)zmj[i][i][m[c[i]]]=1;
for(int len=1;len<=n;len++){
for(int i=1;i+len-1<=n;i++){
int j=i+len-1;
for(int k=i;k<=j;k++){
for(int l=1;l<=tot;l++){
if(zmj[i][k][ok1[l]]&&zmj[k+1][j][ok2[l]]){
zmj[i][j][ok3[l]]=1;
}
}
}
}
}
for(int len=1;len<=n;len++){
for(int i=1;i+len-1<=n;i++){
int j=i+len-1;
for(int l=1;l<=tot;l++){
if(zmj[i][j][l]){
f[i][j]=1;
goto zz;
}
}
f[i][j]=0x3f3f3f3f;
for(int k=i;k<=j;k++){
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
}
zz:;
}
}
for(int i=1;i<=tot;i++){
if(zmj[1][n][ok3[i]])flag[ok3[i]]=1;
}
int fl=0;
if(flag[1])printf("W"),fl=1;
if(flag[2])printf("I"),fl=1;
if(flag[3])printf("N"),fl=1;
if(flag[4])printf("G"),fl=1;
if(!fl)puts("The name is wrong!");
return 0;
}

DP【洛谷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. BZOJ1055: [HAOI2008]玩具取名[区间DP]

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

  6. bzoj 1055 [HAOI2008]玩具取名(区间DP)

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

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

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

  8. Bzoj 1055: [HAOI2008]玩具取名 (区间DP)

    Bzoj 1055: [HAOI2008]玩具取名 (区间DP) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间动态规划和可 ...

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

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

随机推荐

  1. [置顶] C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); [函数说明]ato ...

  2. Celery-4.1 用户指南: Application(应用)

    Application Celery 库在使用之前必须初始化,一个celery实例被称为一个应用(或者缩写 app). Celery 应用是线程安全的,所以多个不同配置.不同组件.不同任务的 应用可以 ...

  3. Windows Bypass UAC

    Windows 10 sdclt UAC bypass @echo off reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\A ...

  4. 为什么in_array(0, ['a', 'b', 'c'])返回true

    为什么in_array(0, ['a', 'b', 'c'])返回true 目录 1 类型转换 2 严格比较 3 false和null 4 数组中有true 在PHP中,数据会自动转换类型后进行比较. ...

  5. Linux 正文处理命令及tar vi 编辑器 homework

    作业一: 1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group >/1.txt 2) 将用户信息数据库文件和用 ...

  6. DDD学习笔录——简介DDD的战术模式、问题空间和解空间

    DDD的战术模式 DDD的战术模式(也称为模型构造块)是一个帮助创建 用于复杂有界上下文的有效模型的 模式集合. 也就是我们常说的设计模式. 问题空间 问题空间将问题域提炼成更多可管理的子域,是真对于 ...

  7. 类型:.net;问题:C#lambda表达式;结果:Lambda表达式详解

    Lambda表达式详解   前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1 ...

  8. 多媒体基础知识之YUV数据

    1.什么是YUV格式 YUV,是一种颜色编码方法.Y表示明亮度(Luminance.Luma),也就是灰度值.U和V则是色度.浓度(Chrominance.Chroma),作用是描述影像色彩及饱和度, ...

  9. DAY8-python之网络编程

    一.客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  10. VUE简单入门

    Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使 ...