博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划练习 10
阅读量:6699 次
发布时间:2019-06-25

本文共 1341 字,大约阅读时间需要 4 分钟。

题目:Zipper (POJ 2192)

链接:

#include 
#include 
#include 
 
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;
}

转载地址:http://nnloo.baihongyu.com/

你可能感兴趣的文章
前端入门教程(七)CSS属性设置
查看>>
我所知道的Promise
查看>>
20180601]函数与标量子查询2.txt
查看>>
交换2个数值的方法
查看>>
“docker-app”实用工具分享,大大提高 Compose 文件复用率
查看>>
位置参数及操作符号
查看>>
伪共享和缓存行填充,Java并发编程还能这么优化!
查看>>
数据库备份DBS商业化发布
查看>>
聊聊3种最常见的响应式设计问题
查看>>
.NET面试题解析(02)-拆箱与装箱
查看>>
高性能、高可靠分布式文件系统 go-fastdfs v1.2.0 发布
查看>>
VR全景看年评!PConline年度评测盛典等你来体验
查看>>
为旗下硬件产品服务,LG推出基于SLAM技术的3D摄像头
查看>>
必应(Bing)每日图片获取API
查看>>
Spring MVC-表单(Form)标签-下拉框(Dropdown)示例(转载实践)
查看>>
Atom飞行手册翻译: 2.7 ~ 2.10
查看>>
Invoice Application Front-end Using ElectronJS
查看>>
redis的配置文件
查看>>
用 Python 语言来写游戏
查看>>
Nginx的Web管理界面收集
查看>>