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

Posted CHerish_OI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1055: [HAOI2008]玩具取名(dp)相关的知识,希望对你有一定的参考价值。

1055: [HAOI2008]玩具取名

题目:传送门

 

简要题意:

     就是固定四个字母,给出这四个字母分别可以由哪两个字母组成,然后在给你一个字符串,要求把这个字符串还原成原始的四个字母的其中一个。

题解:

   一开始看题有点瞎...想了想是一道超级大难题... 

   其实就是一个很简单的DP...

   定义发f[i][j][s]:表示在字符串中i~j这个区间是否可以组合成为字符s

   转移很容易就可以想出来:因为如果f[i][k][s1]==f[k+1][j][s2]==1(i<=k<=j) && s1和s2可以组成s,那么f[i][j][s]=1;

   O(n^4)...大水题

代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 char s[210];
 8 struct node
 9 {
10     char s1,s2,id;
11 }st[210];
12 bool f[210][210][210];
13 int main()
14 {
15     int W,I,N,G;bool bk=false;
16     scanf("%d%d%d%d",&W,&I,&N,&G);
17     int len=0;
18     for(int i=1;i<=W;i++)
19         scanf("%s",s+1),st[++len].s1=s[1],st[len].s2=s[2],st[len].id=W;
20     for(int i=1;i<=I;i++)
21         scanf("%s",s+1),st[++len].s1=s[1],st[len].s2=s[2],st[len].id=I;
22     for(int i=1;i<=N;i++)
23         scanf("%s",s+1),st[++len].s1=s[1],st[len].s2=s[2],st[len].id=N;
24     for(int i=1;i<=G;i++)
25         scanf("%s",s+1),st[++len].s1=s[1],st[len].s2=s[2],st[len].id=G;
26     scanf("%s",s+1);
27     int len1=strlen(s+1);
28     memset(f,0,sizeof(f));
29     for(int i=1;i<=len1;i++)f[i][i][s[i]]=true;
30     for(int i=2;i<=len1;i++)//长度 
31         for(int l=1;l<=len1-i+1;l++)//左端点 
32         {
33             int r=l+i-1;
34             for(int j=l;j<=r;j++)//断点 
35                 for(int k=1;k<=len;k++)//枚举所有种类的字符串 
36                     if(f[l][j][st[k].s1] && f[j+1][r][st[k].s2])
37                         f[l][r][st[k].id]=true;
38         }
39     W=W;I=I;N=N;G=G;
40     if(f[1][len1][W])printf("W"),bk=true;
41     if(f[1][len1][I])printf("I"),bk=true;
42     if(f[1][len1][N])printf("N"),bk=true;
43     if(f[1][len1][G])printf("G"),bk=true;
44     if(bk==false)printf("The name is wrong!\n");
45     return 0;
46 }

 

 

以上是关于bzoj1055: [HAOI2008]玩具取名(dp)的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1055[HAOI2008]玩具取名 区间dp

bzoj1055 [HAOI2008]玩具取名

BZOJ 1055 [HAOI2008]玩具取名

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

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

bzoj千题计划199:bzoj1055: [HAOI2008]玩具取名