题目链接:http://poj.org/problem?id=2192

http://acm.split.hdu.edu.cn/showproblem.php?pid=5707

http://acm.split.hdu.edu.cn/showproblem.php?pid=1501

这三道题除了输入输出格式不一样,其他都一样,意思是给你三个字符串,问你能不能由前两个组成第三个,要按顺序;

但是hdu5707和poj2192数据太水,直接判断字符个数,然后一个一个的判断先后顺序是否满足即可,但是这样是有bug的,例如cbe cadfg cabcdefg本来是No的,但是如果这样做的话就是yes;

作为一个比赛题出这样数据我也是醉了,就这样让学妹们水过了;

其实是最长公共子序列的一种变形;(刚开始的时候听别人这样说,我感觉怎么会呢,后来想想确实就是)

hdu1501用那种方法是过不了的,我们可以用dp[i][j]表示a的前i个字符和b的前j个字符是否能组合成c的前i+j个字符;所以最后只需判断dp[L1][L2]是否为1即可;

当c[i+j] = a[i] && c[i+j] = b[j] 时,dp[i][j]可以由dp[i-1][j]或者dp[i][j-1]的来,所以只要这两个有一个为真,dp[i][j]就为真;

其他两种情况也是这样推得;

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <algorithm>
  5. #include <math.h>
  6. #include <map>
  7. using namespace std;
  8. #define N 1010
  9. #define met(a, b) memset(a, b, sizeof(a))
  10. #define INF 0x3f3f3f3f
  11. #define LINF 10e16
  12. typedef long long LL;
  13.  
  14. int dp[N][N];
  15.  
  16. int main()
  17. {
  18. char a[N], b[N], c[N];
  19. int T, t = ;
  20. scanf("%d", &T);
  21. while(T--)
  22. {
  23. scanf("%s %s %s", a+, b+, c+);
  24.  
  25. printf("Data set %d: ", t++);
  26.  
  27. met(dp, );
  28.  
  29. int L1 = strlen(a+), L2 = strlen(b+), L3 = strlen(c+);
  30.  
  31. if(L1+L2 != L3)
  32. {
  33. puts("no");
  34. continue;
  35. }
  36.  
  37. dp[][] = ;
  38.  
  39. for(int i=; i<=L1; i++)
  40. {
  41. for(int j=; j<=L2; j++)
  42. {
  43. if(i== && j==)continue;
  44.  
  45. if(c[i+j] == a[i] && c[i+j] == b[j])
  46. dp[i][j] = dp[i-][j] || dp[i][j-];
  47. else if(c[i+j] == a[i])
  48. {
  49. if(i == ) dp[i][j] = ;
  50. else dp[i][j] = dp[i-][j];
  51. }
  52. else if(c[i+j] == b[j])
  53. {
  54. if(j == ) dp[i][j] = ;
  55. else dp[i][j] = dp[i][j-];
  56. }
  57. }
  58. }
  59. if(dp[L1][L2]) puts("yes");
  60. else puts("no");
  61. }
  62. return ;
  63. }

Combine String---hdu5727 &&& Zipper(LCS变形)的更多相关文章

  1. HUST 4681 String (DP LCS变形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 题目大意:给定三个字符串A,B,C 求最长的串D,要求(1)D是A的字序列 (2)D是B的子序列 ...

  2. poj 1080 (LCS变形)

    Human Gene Functions 题意: LCS: 设dp[i][j]为前i,j的最长公共序列长度: dp[i][j] = dp[i-1][j-1]+1;(a[i] == b[j]) dp[i ...

  3. POJ 1080( LCS变形)

    题目链接: http://poj.org/problem?id=1080 Human Gene Functions Time Limit: 1000MS   Memory Limit: 10000K ...

  4. 使用System.IO.Combine(string path1, string path2, string path3)四个参数的重载函数提示`System.IO.Path.Combine(string, string, string, string)' is inaccessible due to its protection level

    今天用Unity5.5.1开发提取Assets目录的模块,使用时采用System.IO.Path.Combine(string, string, string, string)函数进行路径生成 明明是 ...

  5. UVA-1625-Color Length(DP LCS变形)

    Color Length(UVA-1625)(DP LCS变形) 题目大意 输入两个长度分别为n,m(<5000)的颜色序列.要求按顺序合成同一个序列,即每次可以把一个序列开头的颜色放到新序列的 ...

  6. Combine String HDU - 5707 dp or 广搜

    Combine String HDU - 5707 题目大意:给你三个串a,b,c,问a和b是不是恰好能组成c,也就是a,b是不是c的两个互补的子序列. 根据题意就可以知道对于c的第一个就应该是a第一 ...

  7. HDU 5707 Combine String (DP,LCS变形)

    题意:给定三个字符串,问你第三个是不是由第一个和第二个组成的. 析:当时比赛是没有做出来啊...一直WA,就是没有判断长度,第一个和第二个和是不是和第三个一样,这个忘记... 我们用d[i][j]表示 ...

  8. Advanced Fruits(HDU 1503 LCS变形)

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  9. HDU 5791 Two ——(LCS变形)

    感觉就是最长公共子序列的一个变形(虽然我也没做过LCS啦= =). 转移方程见代码吧.这里有一个要说的地方,如果a[i] == a[j]的时候,为什么不需要像不等于的时候那样减去一个dp[i-1][j ...

随机推荐

  1. POJ 1743 (后缀数组+不重叠最长重复子串)

    题目链接: http://poj.org/problem?id=1743 题目大意:楼教主の男人八题orz.一篇钢琴谱,每个旋律的值都在1~88以内.琴谱的某段会变调,也就是说某段的数可以加减一个旋律 ...

  2. [Unity2D]鼠标(或触摸)输入处理

    在游戏的编程之中,基本上都需要依赖鼠标的输出,特别是在手机游戏上,绝大部分都需要通过手指触摸来控制游戏.如果要实现一个精灵,当手指点击精灵的会触发相关的操作,或者我们使用一张图片来作为按钮,点击的时候 ...

  3. HDU 4605 Magic Ball Game(离线算法)

    题目链接 思路就很难想+代码实现也很麻烦,知道算法后,已经写的很繁琐而且花了很长时间,200+,好久没写过这么长的代码了. #pragma comment(linker, "/STACK:1 ...

  4. QDialog, QFileDialog 和 QDesktopServices 的使用方法

    Qt中的QDialog类是用来生成对话框的类,QFileDialog 类是QDialog的衍生类,主要用来生成打开文件,或是打开文件目录的对话框,或者是保存文件的对话框,下面我们一一来看代码: 1. ...

  5. 关于Stock Quant与生产内容的理解

    Stock Quant对象是8.0中新增加的内容,主要用于核算库存,与Stock Move相关联,没个Stock Move动作都会关联一个或者多个Stock Quant对象.库存移动的过程实际上就是将 ...

  6. ArcEngine开发 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

    if(pFeature!=null) { IPoint pnt = pFeature.Shape as IPoint; pntArray.Add(pnt); } 调试是pntArray.Add(pnt ...

  7. [转]ASP.NET会话(Session)保存模式

    本文转自:http://blog.csdn.net/cityhunter172/article/details/727743 作者:寒羽枫(cityhunter172) 大家好,已有四个多月没写东东啦 ...

  8. 【转】jsonp详解

    原文地址:http://www.cnblogs.com/yuzhongwusan/archive/2012/12/11/2812849.html json相信大家都用的多,jsonp我就一直没有机会用 ...

  9. IP_TOS选项

    voip IP_tos 选项 在IP头中,有一Type-of-Service字段,该字段描述了IP包的优先级和QoS选项,使用IP_TOS可以来设定该字段的值,以区分不同服务的优先级,Linux 中可 ...

  10. 【转载】wireshark:no interface can be used for capturing in this system with the current configuration

    转自:wireshark:no interface can be used for capturing in this system with the current configuration 通过 ...