动态规划练习 10
2012-08-11 18:01
309 查看
题目:Zipper (POJ 2192)
链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2192
[/code]
链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2192
[code]#include <iostream>
#include <string>
#include <memory.h>
using namespace std;
bool dp[201][201];
// Recursion version.
bool check_yes(const string &a, size_t i, const string &b, size_t j, const string &c, size_t k)
{
if (k >= c.size())
{
return true;
}
bool ret1 = false, ret2 = false;
if (i < a.size() && c[k] == a[i])
{
ret1 = check_yes(a, i + 1, b, j, c, k + 1);
}
if (j < b.size() && c[k] == b[j])
{
ret2 = check_yes(a, i, b, j + 1, c, k + 1);
}
return ret1 || ret2;
}
int main(int argc, char **argv)
{
int n;
string a, b, c;
cin >> n;
for (int m = 1; m <= n; ++m)
{
cin >> a >> b >> c;
// Recursion version.
// cout << check_yes(a, 0, b, 0, c, 0) << endl;
// dp[i][j] = (dp[i - 1][j] && a[i - 1] == c[i + j - 1]) ||
// (dp[i][j - 1] && b[j - 1] == c[i + j - 1]);
memset(dp, 0, sizeof(dp));
dp[0][0] = true;
for (size_t i = 1; i <= a.size(); ++i)
{
dp[i][0] = dp[i - 1][0] && a[i - 1] == c[i - 1];
}
for (size_t j = 1; j <= b.size(); ++j)
{
dp[0][j] = dp[0][j - 1] && b[j - 1] == c[j - 1];
}
for (size_t i = 1; i <= a.size(); ++i)
{
for (size_t j = 1; j <= b.size(); ++j)
{
dp[i][j] = (dp[i - 1][j] && a[i - 1] == c[i + j - 1])
|| (dp[i][j - 1] && b[j - 1] == c[i + j - 1]);
}
}
cout << "Data set " << m << ": " <<
(dp[a.size()][b.size()] ? "yes" : "no") << endl;
}
return 0;
}
[/code]
相关文章推荐
- 动态规划练习10:数字组合
- 动态规划练习一 14:怪盗基德的滑翔翼
- 动态规划练习一 24:鸣人的影分身
- 动态规划练习-2(最大子矩阵)
- 动态规划练习一—5吃糖果
- 动态规划练习一 19题
- 动态规划练习一 移动路线
- 动态规划练习03:采药
- 洛谷P1508 Likecloud-吃、吃、吃 [2017年4月计划 动态规划10]
- 10 25日考试 数学题目练习 斐波拉契 打表
- 笨办法学 Python · 续 练习 10:`sort`
- 基础练习-10
- 算法练习 动态规划 硬币找零
- 练习1-10 人生若只如初见,何事秋风悲画扇
- (10)21.2.4.1 并发 练习 5
- 编程练习-动态规划(生产线问题)
- 最长公共子序列和回文字符串 动态规划 小白算法练习
- thinking in java test5.5练习(10)(11)(12)finalize()方法
- 练习1-10 编写一个将输入复制到输出的的程序,并将其中的制表符替换成\t,把回退符替换成\b,把反斜杠\替换成\\,这样可以将制表符和回退符以可见的方式显示出来。
- 每日练习(10)