poj_2192Zipper
2013-03-17 12:27
316 查看
链接:http://poj.org/problem?id=2192
和数塔一样,中间存在重复子问题。用一个数组记录是否被访问过,也就是记忆化搜索了。
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
bool dp[205][205];
bool flag;
string sa, sb, sc;
void DFS(int i, int j, int k)
{
if(k == sc.size())
{
flag = true;
return;
}
if(flag) return;
if(dp[i][j]) return;
dp[i][j] = true;
if(i < sa.size() && sa[i] == sc[k])
{
DFS(i + 1, j , k + 1);
}
if(j < sb.size() && sb[j] == sc[k])
{
DFS(i, j + 1, k + 1);
}
}
int main()
{
freopen("in.txt","r",stdin);
int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> sa >> sb >> sc;
memset(dp, false, sizeof(dp));
flag = false;
DFS(0, 0, 0);
if(flag)
{
cout << "Data set " << i << ": yes" << endl;
}
else
{
cout << "Data set " << i << ": no" << endl;
}
sa.clear();
sb.clear();
sc.clear();
}
return 0;
}
和数塔一样,中间存在重复子问题。用一个数组记录是否被访问过,也就是记忆化搜索了。
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
bool dp[205][205];
bool flag;
string sa, sb, sc;
void DFS(int i, int j, int k)
{
if(k == sc.size())
{
flag = true;
return;
}
if(flag) return;
if(dp[i][j]) return;
dp[i][j] = true;
if(i < sa.size() && sa[i] == sc[k])
{
DFS(i + 1, j , k + 1);
}
if(j < sb.size() && sb[j] == sc[k])
{
DFS(i, j + 1, k + 1);
}
}
int main()
{
freopen("in.txt","r",stdin);
int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> sa >> sb >> sc;
memset(dp, false, sizeof(dp));
flag = false;
DFS(0, 0, 0);
if(flag)
{
cout << "Data set " << i << ": yes" << endl;
}
else
{
cout << "Data set " << i << ": no" << endl;
}
sa.clear();
sb.clear();
sc.clear();
}
return 0;
}
相关文章推荐
- hdu 1501 || poj 2192 Zipper(搜索:DFS)
- poj 2192 Zipper(DFS+剪枝)
- poj 2192 Zipper
- POJ - 2192 - Zipper (简单DP)
- POJ 2192 / ZOJ 2401 : Zipper - DP
- POJ 2192 Zipper
- poj 2192 Zipper
- poj 2192 Zipper
- POJ 2192 判断两个字符串是否能按顺序组合成第三个字符串 ZIPPER
- poj 2192 zipper
- POJ 2192 && HDU 1501 Zipper (记忆化搜索)
- Zipper poj 2192
- POJ 2192 Zipper (dp)
- poj_2192Zipper
- POJ 2192 Zipper [dfs+剪枝 || dp]
- [简单DP] POJ 2192 Zipper
- POJ 2192 判断两个字符串是否能按顺序组合成第三个字符串 ZIPPER
- POJ 2192 Zipper
- 【算法刷题】poj 2192 Zipper
- POJ 2192 Zipper(判断第3个字符串能否有前两个字符串组成) 水dp