题目大意:输入字符串a,b,c 要求推断c是否有a,b中的个字符保持原有顺序组合而成。

算法思想:

DP

用dp[i][j]表示a的前0~i-1共i个字符和b的前0~j-1共j个字符是否构成c[i+j-1].

状态转换方程:

if(i>=1&&c[i+j-1]==a[i-1])

dp[i][j]=dp[i][j]||dp[i-1][j]

if(j>=1&&c[i+j-1]==b[j-1])

dp[i][j]=dp[i][j]||dp[i][j-1]

代码例如以下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
char a[250];
char b[250];
char c[550];
scanf("%s%s%s",a,b,c);
int la=strlen(a);
int lb=strlen(b);
int lc=strlen(c);
int dp[250][250];
memset(dp,0,sizeof(dp));
dp[0][0]=1;
if(a[0]==c[0])dp[1][0]=1;
if(b[0]==c[0])dp[0][1]=1;
for(int j=0;j<=la;j++){
for(int k=0;k<=lb;k++){
if(k>=1&&c[k+j-1]==b[k-1])
dp[j][k]=dp[j][k]||dp[j][k-1];
if(j>=1&&c[k+j-1]==a[j-1])
dp[j][k]=dp[j][k]||dp[j-1][k];
}
}
if(dp[la][lb])cout<<"Data set "<<i<<": yes"<<endl;
else
cout<<"Data set "<<i<<": no"<<endl;
}
return 0;
}

ACM POJ 2192 Zipper的更多相关文章

  1. poj 2192 Zipper(区间dp)

    题目链接:http://poj.org/problem?id=2192 思路分析:该问题可以看做dp问题,同时也可以使用dfs搜索求解,这里使用dp解法: 设字符串StrA[0, 1, …, n]和S ...

  2. HDU 1501 & POJ 2192 Zipper(dp记忆化搜索)

    题意:给定三个串,问c串是否能由a,b串任意组合在一起组成,但注意a,b串任意组合需要保证a,b原串的顺序 例如ab,cd可组成acbd,但不能组成adcb. 分析:对字符串上的dp还是不敏感啊,虽然 ...

  3. poj 2192 Zipper

    题目 刚开始本来觉得可以用队列来写,但是 例如 ta te teta,ta的t先出队列那就不行了,所以还得用dp dp[i][j] 表示A前i个字符与B前j个字符是否能构成C前i+j个字符 要使 dp ...

  4. POJ 2192 :Zipper(DP)

    http://poj.org/problem?id=2192 Zipper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1 ...

  5. 北大ACM - POJ试题分类(转自EXP)

    北大ACM - POJ试题分类 -- By EXP 2017-12-03 转载请注明出处: by EXP http://exp-blog.com/2018/06/28/pid-38/ 相关推荐文: 旧 ...

  6. ACM: POJ 1401 Factorial-数论专题-水题

    POJ 1401 Factorial Time Limit:1500MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu   ...

  7. [ACM] POJ 2151 Check the difficulty of problems (概率+DP)

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4748   ...

  8. ACM : POJ 2676 SudoKu DFS - 数独

    SudoKu Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu POJ 2676 Descr ...

  9. ACM: POJ 3259 Wormholes - SPFA负环判定

     POJ 3259 Wormholes Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu   ...

随机推荐

  1. c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]

    说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...

  2. CMarkUp接口说明

    CMarkup是一个小型XML的分析器,实现语言是C++,英文版的接口说明地址为:http://www.firstobject.com/dn_markupmethods.htm 有厉害的网友已经翻译出 ...

  3. sql执行疑问

    遇到一个奇怪的事情,学习执行计划的时候写了这么一个sql来看执行计划的执行顺序, SELECT COUNT(*) FROM SIC84 WHERE AAC001 IN (SELECT AAC001 F ...

  4. 【集训笔记】二分图及其应用【HDOJ1068【HDOJ1150【HDOJ1151

    匈牙利算法样例程序 格式说明 输入格式: 第1行3个整数,V1,V2的节点数目n1,n2,G的边数m 第2-m+1行,每行两个整数t1,t2,代表V1中编号为t1的点和V2中编号为t2的点之间有边相连 ...

  5. HDU 4617Weapon(两条异面直线的距离)

    Weapon Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Sub ...

  6. ViewPager控件的Demo

    1.主视图 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...

  7. 采用xml的方式保存数据

    package com.example.myxmlmake; import java.io.File; import java.io.FileOutputStream; import java.uti ...

  8. Android学习笔记之View(一):LayoutInflater

    使用LayoutInflater加载布局的两种方式: 第一种: LayoutInflater inflater=LayoutInflater.from(context); inflater.infla ...

  9. Python 第六篇(中):面向对象编程中级篇

    面向对象编程中级篇: 编程思想概述: 面向过程:根据业务逻辑从上到下写垒代码  #最low,淘汰 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 #混口饭吃 def add(ho ...

  10. Robot Framework与Web界面自动化测试学习笔记:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...