点击打开链接

描述
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. Apache Hadoop 集群安装文档

    简介: Apache Hadoop 集群安装文档 软件:jdk-8u111-linux-x64.rpm.hadoop-2.8.0.tar.gz http://www.apache.org/dyn/cl ...

  2. ios开发者账号、证书相关内容

    背景:因为在实际测试中会涉及到不同的证书,而自己又对证书不了解,所以去查资料了解了一下不同证书的区别,如果有不对的地方,欢迎指正补充.   In House:所有手机都可以安装,但是不能上传到app ...

  3. 【HDU5992】Finding Hotels 【KD树】

    题意 给出n个酒店的坐标和价格,然后m个查询,每个查询给出一个人的坐标和能承受的最大价格,然后找出在他价格承受范围以内,距离他最近的宾馆,如果有多个,那么输出第一个 分析 kd树的模板题 #inclu ...

  4. oracle之Sequences

    产生这样的代码,运行即可

  5. 使用mybatis提供的各种标签方法实现动态拼接Sql。使用sql片段提取重复的标签内容

    Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,如下: <select id="findUserByNameAndSex" par ...

  6. Linux gperf命令

    一.简介 GNU 的 gperf 工具是一种 "完美的" 散列函数,可以为用户提供的一组特定字符串生成散列表.散列函数和查找函数的 C/C++ 代码.通过本文学习如何使用 gper ...

  7. IE6789浏览器使用console.log类似的方法输出调试内容但又不影响页面正常运行

    问题来源:外网IE下,触发js报错.经检测,未清除console造成.清除console后,解决. 问题原因:console.log 原先是 Firefox 的“专利”,严格说是安装了 Firebug ...

  8. jsoncpp学习

    // MyJsonTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <fstream> #includ ...

  9. Android应用开发环境的搭建和使用

    主要包括Android SDK.Android开发工具:也包括如何使用Android提供的ADB.DDMS.AAPT.DX等工具,掌握这些工具是开发Android应用的基础技能. 1.Android的 ...

  10. docker 关于volumns的总结(转)

    原文地址:http://www.cnblogs.com/ivictor/p/4834864.html Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个ce ...