点击打开链接

描述
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".
输入
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.
输出
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.
样例输入
3
cat tree tcraete
cat tree catrtee
cat tree cttaree
样例输出
Data set 1: yes
Data set 2: yes
Data set 3: no
来源
Pacific Northwest 2004

花了好长时间终于用动态规划的方法把样例输入的结果给弄对,但是提交的时候却是WA,后来看了别人的代码发现好多都是用记忆化搜索来做的

AC代码

源代码

#include <stdio.h>
#include <string.h> int main()
{
int i, j, k, t;
int L1, L2, ok[202][202];
char str1[201], str2[201], str3[402];
/**********************
ok[i][j]为真时表示str1的前i个字符可以和str2的前j个字符
组成str3的前i+j个字符。为假时 表示不能。
***********************/ scanf("%d", &t);
for (i=1; i<=t; i++)
{
scanf("%s %s %s", str1, str2, str3);
memset(ok, 0, sizeof(ok));
L1 = strlen(str1);
L2 = strlen(str2); ok[0][0] = 1;
for (j=1; j<=L1; j++)
{
if (ok[j-1][0] == 1 && str1[j-1] == str3[j-1])
ok[j][0] = 1;
else
break;
}
for (j=1; j<=L2; j++)
{
if (ok[0][j-1] == 1 && str2[j-1] == str3[j-1])
ok[0][j] = 1;
else
break;
}
for (j=1; j<=L1; j++)
{
for (k=1; k<=L2; k++)
{
if (ok[j-1][k]==1 && str1[j-1]==str3[j+k-1] || ok[j][k-1]==1 && str2[k-1]==str3[j+k-1])
ok[j][k] = 1;
}
}
if (ok[L1][L2] == 1)
printf("Data set %d: yes\n", i);
else
printf("Data set %d: no\n", i);
}
}

WA代码

源代码

#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#include<iostream> using namespace std;
char strr1[1010];
char strr2[1010];
char strr3[1010];
int maxLen[1010][1010];
int main()
{
int n;
scanf("%d",&n);
for(int w=1; w<=n; w++)
{
scanf("%s %s %s",&strr1,&strr2,&strr3);
int length1=strlen(strr1);
int length2=strlen(strr2);
int length3=strlen(strr3);
int nTmp;
// int i,j,k;
memset(maxLen,0,sizeof(maxLen));
for(int i=0; i<=length1; i++)
{
maxLen[i][0]=0;
}
for(int k=0; k<=length3; k++)
{
maxLen[0][k]=0;
}
for(int i=1; i<=length1; i++)
{
for(int k=1; k<=length3; k++)
{
if(strr1[i-1]==strr3[k-1])
maxLen[i][k]=maxLen[i-1][k-1]+1;
else
maxLen[i][k]=max(maxLen[i-1][k],maxLen[i][k-1]);
}
}
if(maxLen[length1][length3]==length1)
{
memset(maxLen,0,sizeof(maxLen)); for(int j=0; j<length2; j++)
{
maxLen[j][0]=0;
} for(int k=0; k<length3; k++)
{
maxLen[0][k]=0;
} for(int j=1; j<=length2; j++)
{
for(int k=1; k<=length3; k++)
{
if(strr2[j-1]==strr3[k-1])
maxLen[j][k]=maxLen[j-1][k-1]+1;
else
maxLen[j][k]=max(maxLen[j-1][k],maxLen[j][k-1]);
}
}
if(maxLen[length2][length3]==length2)
printf("Data set %d: yes\n",w);
else
printf("Data set %d: no\n",w); }
else
printf("Data set %d: no\n",w);
} return 0;
}

Zipper(动态规划)的更多相关文章

  1. HDU 1501 Zipper 动态规划经典

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

  2. 转载:hdu 动态规划题集

    1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955     背包;第一次做的时候把概率当做背包(放大100000倍化为整数): ...

  3. poj动态规划列表

    [1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...

  4. POJ 动态规划题目列表

    ]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322 ...

  5. hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)

    HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包 ...

  6. soj1010. Zipper

    1010. Zipper Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Given three strings, yo ...

  7. 【转载】 HDU 动态规划46题【只提供思路与状态转移方程】

    1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包;第一次做的时候把概率当做背包(放大100000倍化为整数) ...

  8. HDOJ 1501 Zipper 【简单DP】

    HDOJ 1501 Zipper [简单DP] Problem Description Given three strings, you are to determine whether the th ...

  9. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

随机推荐

  1. 有单例模式 Singleton 涉及的一些防止类被继承的东西

    c#中 : ------------------------------- 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. java中: ------------------ ...

  2. go_接口

    duck typeing 隐式的实现接口的方法就等于实现了接口 main函数 package main import ( "fmt" "learngo/retriever ...

  3. vector中resize()和reserve()的区别

    先看看<C++ Primer>中对resize()函数两种用法的介绍: 1.resize(n) 调整容器的长度大小,使其能容纳n个元素. 如果n小于容器的当前的size,则删除多出来的元素 ...

  4. 用c++实现获取程序运行的时间

    看代码: #include<iostream> #include<ctime> using namespace std; int main() { int i; time_t ...

  5. 链表求和12 · Add Two Numbers

    反向存储,从左往右加 [抄题]: 你有两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和.给 ...

  6. 33-wxpython多个frame之间的信息共享

    https://blog.csdn.net/xyisv/article/details/78576932 https://blog.csdn.net/tianmaxingkong_/article/d ...

  7. mybatis框架入门程序:演示通过mybatis实现数据库的添加操作

    1.mybatis的基本配置准备在我的这篇博文中可以找到:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 映射文件: 在User.xml中添 ...

  8. MySQL数据库远程连接的配置方案

    首先,目的是使用本机可视化工具SQLyog通过IP地址远程访问另一台机器上的MySQL数据库. 本人实践的MySQL版本是MySQL 5.7.23,数据库部署的主机系统是Windows.这些简单配置均 ...

  9. Some details of UIKit

    [Some details of UIKit] 1.UIViewController的toolbarItems属性与UINavigationController配合使用. 2.The view for ...

  10. iOS9 视频播放

       self.videoFileURL = [NSURL URLWithString:[NSString stringWithFormat:@"file:///%@", self ...