这题有两种解题思路,一个是记忆化搜索,一个是dp。

分别贴代码:

记忆化搜索:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<cstring>
char str[],a[],b[];
int sum,flag;
int hash[][];
void dfs(int i,int j,int k)
{
if(flag)
return ;
if(k==sum)
{
flag=;
return ;
}
if(hash[i][j])
return ;
hash[i][j]=;
if(a[i]==str[k])
dfs(i+,j,k+);
if(b[j]==str[k])
dfs(i,j+,k+);
}
int main()
{
int i,j,t,Case=;
scanf("%d",&t);
while(t--)
{
scanf("%s %s %s",&a,&b,&str);
sum=strlen(str);
flag=;
memset(hash,,sizeof(hash));
dfs(,,);
if(flag)
printf("Data set %d: yes\n",Case++);
else
printf("Data set %d: no\n",Case++);
}
return ;
}

dp:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[][];
int main()
{
int i,j,l1,l2,sum,t,Case=;
char a[],b[],str[];
scanf("%d",&t);
while(t--)
{
scanf("%s%s%s",&a,&b,&str);
l1=strlen(a);
l2=strlen(b);
memset(dp,,sizeof(dp));
dp[][]=;
for(i=;i<=l1;i++)
for(j=;j<=l2;j++)
{
if(i>&&a[i-]==str[i+j-]&&dp[i-][j])
dp[i][j]=;
if(j>&&b[j-]==str[i+j-]&&dp[i][j-])
dp[i][j]=;
}
if(dp[l1][l2])
printf("Data set %d: yes\n",Case++);
else
printf("Data set %d: no\n",Case++);
}
return ;
}

hdu1501 动态规划的更多相关文章

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

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

  2. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  3. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  4. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

  5. C#动态规划查找两个字符串最大子串

     //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {            ...

  6. C#递归、动态规划计算斐波那契数列

    //递归         public static long recurFib(int num)         {             if (num < 2)              ...

  7. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  8. 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划

    [BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...

  9. POJ 1163 The Triangle(简单动态规划)

    http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

随机推荐

  1. 在C++中定义常量的两种方法的比较

    常量是定以后,在程序运行中不能被改变的标识符.C++中定义常量可以用#define .const 这两种方法.例如:#define PRICE 10 //定义单价常量10const int PRICE ...

  2. Umbraco中的Examine Search功能讲解

    转载原地址: http://24days.in/umbraco/2013/getting-started-with-examine/ Everytime I read the word Examine ...

  3. python中objects的all和get方法的区别

    all返回的是QuerySet: get返回的是模型对象. 想要获取查询结果的字段值: 从QuerySet中获取对象可以通过for in的形式遍历,之后通过对象获取对象的具体值: get 返回的是对象 ...

  4. Linux 下监控用户最大进程数参数(nproc)是否到达上限

    Linux 下监控用户最大进程数参数(nproc)是否到达上限的步骤: 1.查看各系统用户的进程(LWP)数: 注意:默认情况下采用 ps 命令并不能显示出所有的进程.因为 Linux 环境下执行多线 ...

  5. http请求中乱码------编码的转换

    在http请求中如果包含了汉字,那么就会出现乱码,引文默认的编码是ISO的,为了正常的显示,需要将编码转化为UTF或者gbk,下面提供一个辅助类. import java.io.Unsupported ...

  6. [前端JS学习笔记]JavaScript 数组

    一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {&qu ...

  7. HDU 5512 Meeting 博弈论

    Meeting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5512 ...

  8. Bump mapping的GLSL实现 [转]

    原文 http://www.cnblogs.com/CGDeveloper/archive/2008/07/03/1234206.html 如果物体表面细节很多,我们可以不断的精细化物体的几何数据,但 ...

  9. android4.0蓝牙使能的详细解析

    本文详细分析了android4.0 中蓝牙使能的过程,相比较android2.3,4.0中的蓝牙最大的差别在于UI上on/off的伪开关.在android4.0中加入了 adapter的状态机.所谓的 ...

  10. Swift 3.0 的 open,public,internal,fileprivate,private 关键字

      import Foundation   /// final的含义保持不变 public final class FinalClass { }   // 这个类在ModuleA的范围外是不能被继承的 ...