poj 2192 Zipper

原创 2015年07月09日 22:46:48

1.确定每个字符串与合并之后的字符串在字符串的顺序不变的情况下,各个字符串与合并之后的字符串的正确字符的个数
2.在1的前提下,遍历求出当前元素之前,该字符串与合并之后的字符串相同元素的最大数

#include<iostream>
#include<string.h>
#include<math.h>
#include<fstream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<vector> 
#define MAXSIZE 100
using namespace std;
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b)) 
int n = 0;
char s1[210], s2[210], s3[420];
int dp[210][210]; 
int main()
{
    //freopen("data_2192.txt","r",stdin);
    scanf("%d", &n);
    for (int k = 1; k <= n; k++)
    {
        memset(dp, 0, sizeof(dp));
        scanf("%s%s%s", s1, s2, s3);
        int len1 = strlen(s1);
        int len2 = strlen(s2);
        for (int i = 1; i <= len1; i++)
        {
            if (s1[i - 1] == s3[i - 1])
            {
                dp[i][0] = max (dp[i][0], dp[i - 1][0] + 1);
            }else
            {
                dp[i][0] = dp[i - 1][0];
            }
        }
        for (int i = 1; i <= len2; i++)
        {
            if (s2[i - 1] == s3[i - 1])
            {
                dp[0][i] = max (dp[0][i], dp[0][i - 1] + 1);
            }else
            {
                dp[0][i] = dp[0][i - 1];
            }
        }
        for (int i = 1; i <= len1; i++)
        {
            for (int j = 1; j <= len2; j++)
            {
                 dp[i][j] = max (dp[i - 1][j], dp[i][j - 1]);
                 if (s1[i - 1] == s3[i + j - 1])
                 {
                    dp[i][j] = max (dp[i][j], dp[i - 1][j] + 1);
                 }
                 if (s2[j - 1] == s3[i + j - 1])
                 {
                    dp[i][j] = max (dp[i][j], dp[i][j - 1] + 1);
                 }
            }
        }
        if (dp[len1][len2] == len1 + len2)
        {
            printf("Data set %d: yes\n", k);
        }else
        {
            printf("Data set %d: no\n", k);
        }
    }

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

【动态规划】POJ - 2192 Zipper

【动态规划】POJ - 2192 Zipper DescriptionGiven three strings, you are to determine whether the third strin...
  • xuziling_
  • xuziling_
  • 2017年12月27日 16:45
  • 48

Combine String

Given three strings aa, bb and cc, your mission is to check whether cc is the combine string of ...
  • wanghandou
  • wanghandou
  • 2017年04月19日 19:25
  • 266

Face+Recognition+for+the+Happy+House+-+v3

Face Recognition for the Happy HouseWelcome to the first assignment of week 4! Here you will build a...
  • u012657650
  • u012657650
  • 2017年11月27日 17:40
  • 749

POJ2192:Zipper(DP)

Description Given three strings, you are to determine whether the third string can be formed by com...
  • libin56842
  • libin56842
  • 2013年12月15日 19:37
  • 2322

poj 2192 zipper

今天突然发现我做了这道题,印象不大 ,但是一看题意 感觉很经典 ,所以决定写一下结题报告 首先这道题的题意是 给你三个字符串,前两个给你弄一下,然后可以构成一个字符串,但是你要知道这个条件是 1:他们...
  • u013076044
  • u013076044
  • 2014年10月01日 17:03
  • 948

集成自己的番号+磁链库

1.使用的数据库,mongodb,格式就是简单的{‘番号’:番号,‘磁链’:磁链}2.目标网页有两个 a:http://www.233mr.com/nvyou/ b:http://...
  • qq_33582656
  • qq_33582656
  • 2017年12月23日 16:44
  • 412

doxygen的特定命令

doxygen的特定命令 摘要:本文给出doxygen所支持的全部的一个列表,同时对其进行逐一解释与说明,对于使用doxygen来有重要参考价值。本文主要来自对doxygen官方...
  • joji_h
  • joji_h
  • 2014年07月07日 11:16
  • 6151

poj 2192 Zipper (DP)

#include #include #include #include #include #include #include #include #include #include ...
  • classicshao
  • classicshao
  • 2014年12月20日 13:40
  • 166

ACM POJ 2192 Zipper

题目大意:输入字符串a,b,c 要求判断c是否有a,b中的个字符保持原有顺序组合而成。 算法思想: DP 用dp[i][j]表示a的前0~i-1共i个字符和b的前0~j-1共j个字符是否构成c[...
  • wzg272365960
  • wzg272365960
  • 2014年10月09日 20:21
  • 567

Octave教程 Octave Tutorial

http://blog.csdn.net/pipisorry/article/details/43565653本文教你掌握octave基本知识。Octave Tutorial Octave教程为什么学...
  • pipisorry
  • pipisorry
  • 2015年02月06日 16:13
  • 15426
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 2192 Zipper
举报原因:
原因补充:

(最多只允许输入30个字)