HDU1501 Zipper(DFS+记忆化搜索)
2017-01-21 23:41
381 查看
题意:给三个字符串,保证第三个串长度是前两个串长度之和,确定前两个串保持原有的字母顺序能不能拼成第三个串。
思路:直接搜索的话会有大量重复的运算,要用记忆化数组记录之前的结果。当匹配到第一个串的第i位和第二个串的第j位时,前面可能有多种情况,但三个串后面的长度一定,所以结果也可以确定,用vis[i][j]记录当前状态是否匹配过。
//#include<bits/stdc++.h>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
char s1[205],s2[205],s3[405];
int vis[205][205],f;
void dfs(int i,int j){
if(f)return;
if(s1[i]=='\0'&&s2[j]=='\0'){
f=1;
return;
}
vis[i][j]=1;//记录当前状态
if(s3[i+j]!=s1[i]&&s3[i+j]!=s2[j]){
return;
}
if(s3[i+j]==s1[i]&&!vis[i+1][j]){
dfs(i+1,j);
}
if(s3[i+j]==s2[j]&&!vis[i][j+1]){
dfs(i,j+1);
}
}
int main(){
int n,k=0;
scanf("%d",&n);
getchar();
while(n--){
scanf("%s%s%s",s1,s2,s3);
memset(vis,0,sizeof(vis));//vis初始化为0
f=0;
dfs(0,0);
printf("Data set %d: ",++k);
if(f)puts("yes");
else puts("no");
}
}
思路:直接搜索的话会有大量重复的运算,要用记忆化数组记录之前的结果。当匹配到第一个串的第i位和第二个串的第j位时,前面可能有多种情况,但三个串后面的长度一定,所以结果也可以确定,用vis[i][j]记录当前状态是否匹配过。
//#include<bits/stdc++.h>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
char s1[205],s2[205],s3[405];
int vis[205][205],f;
void dfs(int i,int j){
if(f)return;
if(s1[i]=='\0'&&s2[j]=='\0'){
f=1;
return;
}
vis[i][j]=1;//记录当前状态
if(s3[i+j]!=s1[i]&&s3[i+j]!=s2[j]){
return;
}
if(s3[i+j]==s1[i]&&!vis[i+1][j]){
dfs(i+1,j);
}
if(s3[i+j]==s2[j]&&!vis[i][j+1]){
dfs(i,j+1);
}
}
int main(){
int n,k=0;
scanf("%d",&n);
getchar();
while(n--){
scanf("%s%s%s",s1,s2,s3);
memset(vis,0,sizeof(vis));//vis初始化为0
f=0;
dfs(0,0);
printf("Data set %d: ",++k);
if(f)puts("yes");
else puts("no");
}
}
相关文章推荐
- hdu 1501 Zipper (dfs+记忆化搜索)
- HDU 1501 Zipper(Dfs记忆化搜索)
- (step4.3.5)hdu 1501(Zipper——DFS)
- hdu 1501 Zipper dfs
- HDU 1501 Zipper(DP,DFS)
- HDU 1501 Zipper(DP,DFS)
- hdu 1501 || poj 2192 Zipper(搜索:DFS)
- HDU-1501 (POJ-2192) Zipper (DFS||DP)
- hdu1501 zipper【记忆化搜索】【动态规划】
- hdu 1501 Zipper(记忆化搜索)
- HDU 1501 Zipper 【DFS】
- hdu 1501 Zipper(dfs)
- HDU 1501 Zipper (DFS+剪枝做法)
- 【DFS(记忆化)】hdu 1501 Zipper
- HDU 1501 Zipper(DP,DFS)
- HDU 1501 Zipper(DFS)
- hdu 1501 Zipper(dfs或dp)
- Zipper(HDU 1501) —— DFS
- Hdu 1501 Zipper【dfs】
- HDU 1501 Zipper (DFS)