hdu1501 Zipper

Zipper

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 59   Accepted Submission(s) : 26

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

Given three strings, you are to determine whether the third string can be formed by combining the characters in the first two strings. The first two strings can be mixed arbitrarily, but each must stay in its original order.

For example, consider forming "tcraete" from "cat" and "tree":

String A: cat
String B: tree
String C: tcraete

As you can see, we can form the third string by alternating characters from the two strings. As a second example, consider forming "catrtee" from "cat" and "tree":

String A: cat
String B: tree
String C: catrtee

Finally, notice that it is impossible to form "cttaree" from "cat" and "tree".

Input

The first line of input contains a single positive integer from 1 through 1000. It represents the number of data sets to follow. The processing for each data set is identical. The data sets appear on the following lines, one data set per line.

For each data set, the line of input consists of three strings, separated by a single space. All strings are composed of upper and lower case letters only. The length of the third string is always the sum of the lengths of the first two strings. The first two strings will have lengths between 1 and 200 characters, inclusive.

Output

For each data set, print:

Data set n: yes

if the third string can be formed from the first two, or

Data set n: no

if it cannot. Of course n should be replaced by the data set number. See the sample output below for an example.

Sample Input

3
cat tree tcraete
cat tree catrtee
cat tree cttaree

Sample Output

Data set 1: yes
Data set 2: yes
Data set 3: no

Source

Pacific Northwest 2004


#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int t,flag,l1,l2,l3;
char ch1[205],ch2[205],ch3[420];
int f[205][205];
void dfs(int i,int j,int k)
{
    if (k==l3)
    {
        flag=1;
        return;
    }
    if (f[i][j]) return;
    f[i][j]=1;
    if (i<l1)
     if (ch3[k]==ch1[i]) dfs(i+1,j,k+1);
    if (flag) return;
    if (j<l2)
    if (ch3[k]==ch2[j]) dfs(i,j+1,k+1);
    if (flag) return;
}
int main()
{
    scanf("%d",&t);
    for(int tt=1;tt<=t;tt++)
    {
        scanf("%s%s%s",&ch1,&ch2,&ch3);
        l1=strlen(ch1);
        l2=strlen(ch2);
        l3=strlen(ch3);
        printf("Data set %d: ",tt);
        flag=0;
        memset(f,0,sizeof(f));
        dfs(0,0,0);
        if (flag) printf("yes\n");
            else printf("no\n");
    }
    return 0;
}
时间: 2024-10-04 16:09:20

hdu1501 Zipper的相关文章

hdu1501 Zipper[简单DP]

题目地址 hdu1501 题干 代码和解释 最优子结构分析:设这三个字符串分别为a.b.c,如果a.b可以组成c,那么c的最后一个字母必定来自a或者b的最后一个字母.c去除最后一位,就变成由a-1和b或者a和b-1构成c-1的问题. 状态转移方程:DP[i][j]表示c中i个字符来自于a,j个字符来自于b,即由a的前i个字符和b的前j个字符组成c的前i+j个字符.DP[i][j]为1则真,为0则假. /*给3个字符串,让你判断能不能组合前两个字符串来获得第3个字符串.前两个字符串可以被任意混合,

hdu1501&amp;&amp;poj2192 Zipper(DFS)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1501 POJ:   http://poj.org/problem?id=2192 Zipper Description Given three strings, you are to determine whether the third string can be formed by combining the

hdu1501&amp;amp;&amp;amp;poj2192 Zipper(DFS)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1501 POJ:   http://poj.org/problem?id=2192 Zipper Description Given three strings, you are to determine whether the third string can be formed by combining the

hdu 1501 Zipper 记忆化搜索

Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7188    Accepted Submission(s): 2571 Problem Description Given three strings, you are to determine whether the third string can be formed

hdu 1501 Zipper (dfs+记忆化搜索)

Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6491    Accepted Submission(s): 2341 Problem Description Given three strings, you are to determine whether the third string can be formed

Zipper

  Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8072    Accepted Submission(s): 2843 Problem Description Given three strings, you are to determine whether the third string can be formed

HDOJ 题目1501 Zipper(DFS)

Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7223    Accepted Submission(s): 2576 Problem Description Given three strings, you are to determine whether the third string can be formed

【HDOJ】1501 Zipper

DFS.注意剪枝,0ms. 1 #include <stdio.h> 2 #include <string.h> 3 4 #define False 0 5 #define True 1 6 #define MAXN 201 7 8 char stra[MAXN], strb[MAXN], strc[MAXN<<1]; 9 int len1, len2, len3; 10 11 int dfs(int e1, int e2, int e3) { 12 int i, fl

HDU 1501 Zipper

Problem Description Given three strings, you are to determine whether the third string can be formed by combining the characters in the first two strings. The first two strings can be mixed arbitrarily, but each must stay in its original order. For e