Hdu 1501 Zipper【dfs】

原创 2016年05月31日 19:52:54

Zipper

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9212 Accepted Submission(s): 3263


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


非常简单的dfs ,结果各种错误都犯了.......


#include<cstdio>
#include<cstring>
const int maxn=1005;
char a[maxn],b[maxn],c[2*maxn];
bool vis[maxn][maxn],kase;
void dfs(int la,int lena,int lb,int lenb)
{
	if(la>lena||lb>lenb||vis[la][lb])
	{
		return;
	}
	if(la==lena&&lb==lenb)
	{
		kase=1;
		return;
	}
	vis[la][lb]=1;
	if(!kase&&a[la]==c[la+lb])
	{
		dfs(la+1,lena,lb,lenb);
	}
	if(!kase&&b[lb]==c[la+lb])
	{
		dfs(la,lena,lb+1,lenb);
	}
}
int main()
{
	int t;
	scanf("%d",&t);
	for(int i=1;i<=t;i++)
	{
		kase=0;
		memset(vis,0,sizeof(vis));
		scanf("%s%s%s",a,b,c);
		printf("Data set %d: ",i);
		dfs(0,strlen(a),0,strlen(b));
		printf("%s\n",kase?"yes":"no");
	}
	return 0;
}


#include<stdio.h>
#include<string.h>
const int maxn=205;
char a[maxn],b[maxn],c[maxn*2];
bool vis[maxn][maxn];
bool ok(int la,int lena,int lb,int lenb)
{
	if(la==lena&&lb==lenb)
	{
		return 1;
	}
	int kase=0;
    if((la<lena||lb<lenb)&&!vis[la][lb])
    {
    	vis[la][lb]=1;
        if(a[la]==c[la+lb])
        {
            kase=ok(la+1,lena,lb,lenb);
        }
        if(b[lb]==c[la+lb])
        {
            kase=kase||ok(la,lena,lb+1,lenb);
        }
    }
    return kase;
}
int main()
{
    int t,i,j,k,l;
    scanf("%d",&t);
    for(i=1;i<=t;i++)
    {
    	memset(vis,0,sizeof(vis));
        scanf("%s%s%s",a,b,c);
        printf("Data set %d: ",i);
        printf("%s\n",ok(0,strlen(a),0,strlen(b))?"yes":"no");
    }
    return 0;
} 



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Zipper(HDU 1501) —— DFS

Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S...

HDU 1501 Zipper(DP,DFS)

题意 判断能否由字符串a,b中的字符不改变各自的相对顺序组合得到字符串c 本题有两种解法 DP或者DFS 考虑DP 令d[i][j]表示能否有a的前i个字符和b的前j个字符组合得到c的前i+j个...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

(step4.3.5)hdu 1501(Zipper——DFS)

题目大意:是给定3个字符串,问前两个是否能够组成第3个字符串。此题是个非常经典的dfs题. 解题思路:DFS 代码如下:有详细的注释 /* * 1501_2.cpp * *...

HDU:1501 Zipper(DFS+剪枝)

Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S...

HDU-1501 (POJ-2192) Zipper (DFS||DP)

要不是放在dp专题里面,我还一直以为只能dfs做 看到一个dp的解法,才明白如何进行状态转移 设dp[i][j]表示串a的前i个字符与串b的前j个字符是否能形成串c的前i+j个字符, 若dp[i-1...

Hdu 1501 Zipper

Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S...

HDU 1501 Zipper

Description Given three strings, you are to determine whether the third string can be formed by com...

HDU 1501 Zipper

Problem Description Given three strings, you are to determine whether the third string can be for...

hdu 1501 Zipper

Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S...

HDU-1501-Zipper

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1501 Zipper Problem Description Given thre...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)