zoukankan      html  css  js  c++  java
  • poj 2192 Zipper

    题目

    刚开始本来觉得可以用队列来写,但是 例如 ta te teta,ta的t先出队列那就不行了,所以还得用dp

    dp[i][j] 表示A前i个字符与B前j个字符是否能构成C前i+j个字符
    要使 dp[i][j] = 1 :需满足  dp[i-1][j] == 1 && C[i+j-1] == A[i-1]
                         或者  dp[i][j-1] == 1 && C[i+j-1] == B[j-1]
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    char str1[210],str2[210],str[500];
    int dp[210][210];
    int main()
    {
        int T;
        cin>>T;
        int Case = 1;
        while(T--)
        {
            cin>>str1>>str2>>str;
            memset(dp,0,sizeof(dp));
            dp[0][0]=1;
            int len1 = strlen(str1);
            int len2 = strlen(str2);
            for(int i=0; i<=len1; i++)
            {
                for(int j=0; j<=len2; j++)
                {
                    if(i>0&&dp[i-1][j]==1&&str1[i-1]==str[i+j-1])
                        dp[i][j]=1;
                    if(j>0&&dp[i][j-1]==1&&str2[j-1]==str[i+j-1])
                        dp[i][j]=1;
                }
            }
            if(dp[len1][len2]==1) printf("Data set %d: yes
    ",Case++);
            else printf("Data set %d: no
    ",Case++);
        }
        return 0;
    }
  • 相关阅读:
    SQL Challenges靶机
    XSS靶机1
    djinn靶机
    Sunset靶机
    统计学 一 集中趋势
    测试
    测试
    统计学 一 集中趋势
    算法分析
    代码测试
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160137.html
Copyright © 2011-2022 走看看