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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

poj2192 Zipper 两个字符串是否能构成第三个

Zipper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13390   Accept...

POJ 2192 Zipper

一道简单DP【然而对于我来说还是难,看了很多题解才明白】 题目大意:输入字符串a,b,c 要求判断c是否有a,b中的个字符保持原有顺序组合而成。 算法思想: DP 用dp[i][j]表示...

POJ - 2192 - Zipper (简单DP)

题目传送:Zipper 思路:设状态DP[i][j]为字符串A前i个字符和B前j个字符能否组成C的前i+j个字符,能则为true,否则false AC代码: #include #includ...

poj2192 | HDU1501 - Zipper(最长公共子序列)

Zipper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14117   Accepted: 4958 ...
  • yew1eb
  • yew1eb
  • 2013年05月25日 14:39
  • 1524

POJ 2192 Zipper(字符串)

Zipper Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18632 Acce...

【POJ 2192 Zipper】+ 贪心 + 字符匹配

Zipper Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18323 Accepted: 6523...

POJ2192:Zipper(DP)

Description Given three strings, you are to determine whether the third string can be formed by com...

poj2192(Zipper)

题目链接:http://poj.org/problem?id=2192          题意:给你三个字符串,问第三个字符串能否由前两个字符串按顺序组成(第三字符串的长度等于前两个字符串长度之和)...
  • kath_y
  • kath_y
  • 2012年06月08日 23:41
  • 395

POJ2192 Zipper(DP||DFS)

题意: 输入三个字符串,看前两个字符串能否组成第三个字符串,要求前两个字符串各自的字母顺序在第三个字符串中保持不变 要点: 可以用dp或dfs做,下面是dp的思路: 首先用定义一个数组dp[i][j]...

POJ---2192-Zipper

A - Zipper Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 2192 Zipper
举报原因:
原因补充:

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