zoukankan      html  css  js  c++  java
  • BZOJ 1055 [HAOI2008]玩具取名 DP

    dp[i][j][k]表示从i到j合并,能否合并成字母k。。

    怎么暴力怎么来转移~

    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <algorithm>
     6 #include <vector>
     7 
     8 #define N 222
     9 
    10 using namespace std;
    11 
    12 const char t[5]={' ','W','I','N','G'};
    13 int hs[N],num[5],dp[N][N][5],ans;
    14 char str[N];
    15 vector<int> a[5][5];
    16 
    17 inline void read()
    18 {
    19     hs['W']=1; hs['I']=2; hs['N']=3; hs['G']=4;
    20     for(int i=1;i<=4;i++) scanf("%d",&num[i]);
    21     for(int i=1;i<=4;i++)
    22         for(int j=1;j<=num[i];j++)
    23         {
    24             scanf("%s",str+1);
    25             a[hs[str[1]]][hs[str[2]]].push_back(hs[t[i]]);
    26         } 
    27     scanf("%s",str+1);
    28 }
    29 
    30 inline void go()
    31 {
    32     int n=strlen(str+1);
    33     for(int i=1;i<=n;i++) dp[i][i][hs[str[i]]]=true;
    34     for(int j=2;j<=n;j++)
    35         for(int i=1;i+j-1<=n;i++)
    36             for(int k=i;k<i+j-1;k++)
    37                 for(int p=1;p<=4;p++)
    38                     if(dp[i][k][p])
    39                         for(int q=1;q<=4;q++)
    40                             if(dp[k+1][i+j-1][q])
    41                                 for(int s=0;s<a[p][q].size();s++)
    42                                     dp[i][i+j-1][a[p][q][s]]=true;
    43     for(int i=1;i<=4;i++)
    44         if(dp[1][n][i]) ans++,printf("%c",t[i]);
    45     if(ans==0) printf("The name is wrong!");
    46 }
    47 
    48 int main()
    49 {
    50     read(),go();
    51     return 0;
    52 }
    没有人能阻止我前进的步伐,除了我自己!
  • 相关阅读:
    JavaScript Date对象
    BOM 和 DOM
    JS变量声明方式
    CSS3 选择器
    Python文件操作
    第十三章 迭代器、生成器、 装饰器
    python专题 --- 递归
    React JSX
    ES6——面向对象应用
    ES6——面向对象-基础
  • 原文地址:https://www.cnblogs.com/proverbs/p/2956837.html
Copyright © 2011-2022 走看看