• bzoj1055[HAOI2008]玩具取名 区间dp


    1055: [HAOI2008]玩具取名

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

     f[l][r][k]表示l到r区间能否表示成k字母,枚举断点即可

     1 #include<bits/stdc++.h>
     2 #define N 205
     3 using namespace std;
     4 int n,fg,sum[4],f[N][N][4],t[N];
     5 char mp[]={'W','I','N','G'},s[N],p1[4][20],p2[4][20];
     6 
     7 int dp(int l,int r,int k){
     8     if(l==r)return t[(int)s[l]]==k;
     9     if(~f[l][r][k])return f[l][r][k];
    10     int &res=f[l][r][k];res=0;
    11     for(int i=l;i<r;i++)
    12     for(int j=1;j<=sum[k];j++)
    13     res|=dp(l,i,t[(int)p1[k][j]])&&dp(i+1,r,t[(int)p2[k][j]]);
    14     return res;
    15 }
    16 
    17 int main(){
    18     memset(f,-1,sizeof(f));
    19     t['W']=0;t['I']=1;t['N']=2;t['G']=3;
    20     for(int i=0;i<4;i++)scanf("%d",&sum[i]);
    21     for(int i=0;i<4;i++){
    22         for(int j=1;j<=sum[i];j++)
    23         scanf("
    %c%c",&p1[i][j],&p2[i][j]);
    24         
    25     }
    26     scanf("%s",s+1);
    27     n=strlen(s+1);
    28     for(int i=0;i<4;i++)
    29     if(dp(1,n,i))putchar(mp[i]),fg=1;
    30     if(!fg)puts("The name is wrong!");
    31     return 0;
    32 }
  • 相关阅读:
    使用Connector/C++(VS2015)连接MySQL的完整例子
    一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句
    Delphi连接MySql(待测试验证,使用mysql.pas未通过)
    MySQL5.5.51启用网络远程连接
    delphi做的程序如何连接SQL数据库
    定时删除所有文件夹下的_desktop.ini文件
    Delphi中打开网页连接的几种方法
    SQL增删改查
    ADOConnection断线重连
    TDBGridEh 标头排序
  • 原文地址:https://www.cnblogs.com/wsy01/p/8324624.html
Copyright © 2020-2023  润新知