zoukankan      html  css  js  c++  java
  • Hdu 4545 魔法串 字符串dp

    魔法串

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 474    Accepted Submission(s): 200


    Problem Description
      小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转换使小明的串和小西的变成同一个,那么他们两个人都会很开心。这里魔法指的是小明的串可以任意删掉某个字符,或者把某些字符对照字符变化表变化。如:
        小西的串是 abba;
        小明的串是 addba; 
        字符变化表 d b (表示d能转换成b)。
      那么小明可以通过删掉第一个d,然后将第二个d转换成b将串变成abba。

      现在请你帮忙判断:他们能不能通过魔法转换使两个人的串变成一样呢?
     

    Input
      首先输入T,表示总共有T组测试数据(T <= 40)。
      接下来共T组数据,每组数据第一行输入小西的字符串,第二行输入小明的字符串(数据保证字符串长度不超过1000,小明的串的长度大于等于小西的,且所有字符均为小写字母)。接着输入字母表,先输入m,表示有m个字符变换方式(m< = 100),接着m行每行输入两个小写字母,表示前一个可以变为后一个(但并不代表后一个能变成前一个)。
     

    Output
      对于每组数据,先输出Case数。
      如果可以通过魔法转换使两个人的串变成一样,输出“happy”,
      否则输出“unhappy”。
      每组数据占一行,具体输出格式参见样例。
     

    Sample Input
    2 abba addba 1 d b a dd 0
     

    Sample Output
    Case #1: happy Case #2: unhappy
     

    Source
     

    Recommend
    liuyiding
     

    -------------


    -------------

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    char a[1111];
    char b[1111];
    int f[1111][1111];
    int la,lb;
    int m;
    int map[30][30];
    
    int main()
    {
        int T;
        char c1,c2;
        cin>>T;
        int cnt=1;
        while (T--)
        {
            memset(f,0,sizeof(f));
            memset(map,0,sizeof(map));
            cin>>(a+1);
            cin>>(b+1);
            la=strlen(a+1);
            lb=strlen(b+1);
            cin>>m;
            for (int i=1;i<=m;i++)
            {
                cin>>c1>>c2;
                map[c1-'a'][c2-'a']=1;
            }
            for (int i=0;i<=lb;i++)
            {
                f[0][i]=1;
            }
            for (int i=1;i<=la;i++)
            {
                for (int j=1;j<=lb;j++)
                {
                    if (a[i]==b[j])
                    {
                        if (f[i-1][j-1]) f[i][j]=1;
                    }
                    if (f[i][j-1]) f[i][j]=1;
                    for (int k=0;k<26;k++)
                    {
                        if (map[b[j]-'a'][k]&&a[i]-'a'==k)
                        {
                            if (f[i-1][j-1]) f[i][j]=1;
                        }
                    }
                }
            }
            if (f[la][lb]) cout<<"Case #"<<cnt++<<": happy"<<endl;
            else cout<<"Case #"<<cnt++<<": unhappy"<<endl;
        }
        return 0;
    }
    





  • 相关阅读:
    VisualSVN-Server windows 版安装时报错 "Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details."
    Pytest 单元测试框架之初始化和清除环境
    Pytest 单元测试框架入门
    Python(email 邮件收发)
    Python(minidom 模块)
    Python(csv 模块)
    禅道简介
    2020年最好的WooCommerce主题
    Shopify网上开店教程(2020版)
    WooCommerce VS Magento 2020:哪个跨境电商自建站软件更好?
  • 原文地址:https://www.cnblogs.com/cyendra/p/3226327.html
Copyright © 2011-2022 走看看