HDU 1503(字符串,合并输出)

来源:互联网 发布:网络分层结构模型 编辑:程序博客网 时间:2024/04/27 21:25
#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>using namespace std;int dp[105][105];int mark[105];int path[105][105];char str1[105], str2[105];int main(){    str1[0] = str2[0] = '0';    while (cin >> str1 + 1 >> str2 + 1)    {        int i, j, k;        memset(dp, 0, sizeof(dp));        memset(mark, -1, sizeof(mark));        memset(path, 0, sizeof(path));        int len1, len2;        len1 = strlen(str1) - 1;        len2 = strlen(str2) - 1;        for (i = 1; i <= len1; i++)        {            for (j = 1; j <= len2; j++)            {                if (str1[i] == str2[j])                {                    dp[i][j] = dp[i - 1][j - 1] + 1;                }                else if (dp[i - 1][j] > dp[i][j - 1])                {                    dp[i][j] = dp[i - 1][j];                    path[i][j] = 1;                }                else                {                    dp[i][j] = dp[i][j - 1];                    path[i][j] = 2;                }            }        }        for (i = len1, j = len2; i >= 1 && j >= 1;)        {            if (str1[i] == str2[j])            {                mark[i] = j;                i--;                j--;            }            else if (path[i][j] == 1)            {                i--;            }            else            {                j--;            }        }        int temp = 1;        for (i = 1; i <= len1; i++)        {            if (mark[i]== -1)            {                printf("%c", str1[i]);            }            else            {                for (k = temp; k <= mark[i]; k++)                {                    printf("%c", str2[k]);                }             temp= mark[i] + 1;            }               }        for (i = temp; i <= len2; i++)            printf("%c", str2[i]);        printf("\n");    }    return 0;}
0 0