zoukankan      html  css  js  c++  java
  • 最长公共子序列变形(hdu1503)

    给你两个字符串组成一个字符串,在组成的字符串中字符的相对顺序不变的情况下,可以在组成的字符串中找到原先两个字符串...
    字母可以错开,但是相对顺序不能变化,要这个组成的字符串中字母数最少..
    思路:先求出最长公共子序列,同时记录下路径,记录路径!输出时最长公共子序列的字符只输出一次
    这类字符串的题先存一下,估计以后会忘..

    include <stdio.h>

    include <string.h>

    include

    using namespace std;

    define long long ll

    char a[110],b[110],c[210];
    int dp[110][110];
    struct node
    {
    int x,y;
    char ch;
    }ans[210];
    int main()
    {
    while(cin>>a>>b)
    {
    int i,j;
    int l1=strlen(a),l2=strlen(b);
    memset(dp,0,sizeof(dp));
    for (i=1;i<=l1;i++)
    for (j=1;j<=l2;j++)
    if (a[i-1]b[j-1])
    dp[i][j]=dp[i-1][j-1]+1;
    else
    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
    if (dp[l1][l2]
    0)
    {
    cout<<a<<b<<endl;
    continue;
    }
    while(p>=0&&q>=0)
    {
    if (dp[p+1][q+1]dp[p][q]+1&&a[p]b[q])
    {
    ans[k].x=p,ans[k].y=q;
    ans[k++].ch =a[p];
    p--,q--;

    		}
    		else if (dp[p][q+1]>dp[p+1][q])
    		p--;
    		else
    		q--;
    	}
    	int x=0,y=0;
    	for (i=k-1;i>=0;i--)
    	{
    		while(x!=ans[i].x)
    		cout<<a[x],x++;
    		while(y!=ans[i].y)
    		cout<<b[y],y++;
    		cout<<ans[i].ch;
    		x++,y++;
    	}
    cout<<a+ans[0].x<<b+ans[0].y<<endl;	
    }
    return 0;
    

    }

  • 相关阅读:
    Spring自动装配Beans
    Spring过滤器组件自动扫描
    Spring自动扫描组件
    Spring EL运算符实例
    Spring EL方法调用实例
    Spring EL bean引用实例
    Spring EL hello world实例
    Spring @PostConstruct和@PreDestroy实例
    Spring Bean init-method 和 destroy-method实例
    Spring Bean InitializingBean和DisposableBean实例
  • 原文地址:https://www.cnblogs.com/shidianshixuan/p/13738613.html
Copyright © 2011-2022 走看看