1055: [HAOI2008]玩具取名

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1119  Solved: 653
[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

1 1 1 1
II
WW
WW
IG
IIII

Sample Output

IN

HINT

W可以变成II所以IIII可以缩成WW IN均能变成WW所以WW又可以缩成I或者N 所以最终答案应该按照“WING”的顺序输出IN

[数据范围]

100%数据满足Len<=200,W、I、N、G<=16

Source

题解:区间DP嘛,L~R用a组可不可以,每次用字典来分割区间。

又因为没有解的情况WA了一发= =。。。。。。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<stack>
 6 #include<queue>
 7 #include<cstring>
 8 #define PAU putchar(' ')
 9 #define ENT putchar('\n')
10 using namespace std;
11 const int maxn=200+10,inf=-1u>>1;
12 int id(char ch){
13     if(ch=='W')return 0;
14     if(ch=='I')return 1;
15     if(ch=='N')return 2;
16     if(ch=='G')return 3;
17     return -1;
18 }
19 void princ(int a){
20     if(!a)putchar('W');
21     else if(a==1)putchar('I');
22     else if(a==2)putchar('N');
23     else if(a==3)putchar('G');
24     return;
25 }
26 int t[4],tx[4][20][2],arr[maxn];int dp[4][maxn][maxn];
27 bool solve(int a,int L,int R){
28     int&res=dp[a][L][R];if(res!=-1)return res;
29     if(L==R)return (res=(arr[L]==a));
30     for(int i=L;i<R;i++){
31         for(int j=0;j<t[a];j++){
32             if(solve(tx[a][j][0],L,i)&&solve(tx[a][j][1],i+1,R))return (res=true);
33         }
34     }return (res=false);
35 }
36 inline int read(){
37     int x=0;bool sig=1;char ch=getchar();
38     for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=0;
39     for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';
40     return sig?x:-x;
41 }
42 inline void write(int x){
43     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
44     int len=0,buf[20];while(x)buf[len++]=x%10,x/=10;
45     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
46 }
47 char s[maxn];
48 int main(){
49     for(int i=0;i<4;i++)t[i]=read();
50     for(int i=0;i<4;i++){
51         for(int j=0;j<t[i];j++){
52             scanf("%s",s);tx[i][j][0]=id(s[0]);tx[i][j][1]=id(s[1]);
53         }
54     }
55     scanf("%s",s);
56     for(int i=0;s[i];i++)arr[i]=id(s[i]);int Len=strlen(s);
57     memset(dp,-1,sizeof(dp));bool flag=false;
58     for(int i=0;i<4;i++){
59         if(solve(i,0,Len-1))princ(i),flag=true;
60     }
61     if(!flag)puts("The name is wrong!");
62     return 0;
63 }

转载于:https://www.cnblogs.com/chxer/p/4736265.html

BZOJ 1055 [HAOI2008]玩具取名相关推荐

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

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2010  Solved: 1177 [Submit][St ...

  2. [BZOJ]1055: [HAOI2008]玩具取名

    Time Limit: 10 Sec  Memory Limit: 162 MB Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字 ...

  3. BZOJ1055: [HAOI2008]玩具取名[区间DP]

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

  4. 「BZOJ1055」[HAOI2008] 玩具取名 - 区间动规 - 记忆化搜索

    ->戳我进原题 [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2486 Solved: 1448 Descript ...

  5. [HAOI2008]玩具取名

    [HAOI2008]玩具取名 文章目录 题目描述 输出描述: 题解 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO F ...

  6. bzoj1055 [HAOI2008]玩具取名 区间DP

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

  7. bzoj 1054: [HAOI2008]移动玩具.cpp

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2260  Solved: 1254 [Submit][St ...

  8. BZOJ 1054: [HAOI2008]移动玩具(bfs)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1054 题解: 将每一种状态十六位压成二进制,然后bfs..不解释.. p.s.注意特判初始 ...

  9. bzoj 1056 [HAOI2008]排名系统(1862 [Zjoi2006]GameZ游戏排名系统)

    1056: [HAOI2008]排名系统 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1854  Solved: 502 [Submit][Sta ...

最新文章

  1. Java入门系列-16-继承
  2. 阿里巴巴60万年薪抢毕业生 必须是公认技术牛人
  3. 蓝桥杯-长草-代码(BFS)
  4. 控制台文字对战游戏 初始版
  5. phoneGap工程的创建
  6. 【HDU5482】Numquam vincar,暴力(da biao)预处理+组合数
  7. python acme_使用 acme-tiny 工具生成 Let's Encrypt 的免费 SSL 证书
  8. C语言常见的关键字汇总
  9. 2016中国app年度排行榜:十大行业、25个领域、Top 500 和2017趋势预测
  10. 《华为你学不会》读书笔记
  11. 打开office word 2003 时出现了“出现问题需要关闭,是否发送错误报告”
  12. 【吐血整理】数据库的安全性
  13. stm32F407的串口6卡死问题
  14. 下行控制信息 - 下行DCI
  15. ROS入门之——action
  16. 独家 | 全球2000家客户,这家公司推动林肯MKZ成为最流行的自动驾驶样车
  17. 关于Android应用开发的一些安全注意事项
  18. 男人。。。女人。。。经典语录
  19. httpPost.setHeader,httpPost.addHeader 区别
  20. 登录功能图片验证码的实现

热门文章

  1. hdu 1042 N!(大数)
  2. HDU 4930 Fighting the Landlords(扯淡模拟题)
  3. Sizzle系列之 选择元素
  4. tty_operations
  5. 通过css将多个图标或图片用同一张图片通过定位背景位置调用到页面
  6. android activityManager
  7. sql server 海量数据速度提升:SQL优化-索引(7) 【转】
  8. C#数据同步中基本步骤和用到的相关函数
  9. RedOffice教你DIY环保小日历
  10. 11.20 yum:自动化RPM包管理工具