/*给出两串,求一个最小的字符串包含这两个子串,子串在这个字符串中的顺序不变,
做法:定义两个数组,分别标记公共部分在第一个串和第二个串中的位置,在输出是判断一下,输出一个串两个公共部分之间的部分,不包含
公共部分,在输出第二个串公共部分之间的串,和最后一个公共部分,然后剩下的在公共部分后面的直接输出就可以了,注意这道题不能直接求出
最长公共,然后在最短的那个串中删除这个最长公共,剩下的加入第二个串,这样会导致顺序不对*/
#include<stdio.h>
#include<string>
#include<string.h>
#include<iostream>
using namespace std;
const int maxn=;
int dir[maxn][maxn],dp[maxn][maxn];
char ida[maxn],idb[maxn];
int num;
char a[maxn],b[maxn];
void LCS(int n,int m)
{
int i,j;
memset(dp,,sizeof(dp));
memset(dir,,sizeof(dir));
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
if(a[i-]==b[j-])
{
dp[i][j]=dp[i-][j-]+;
dir[i][j]=;
}
else if(dp[i-][j]>dp[i][j-])
{
dp[i][j]=dp[i-][j];
dir[i][j]=;
}
else
{
dp[i][j]=dp[i][j-];
dir[i][j]=;
}
}
}
void print(int n,int m)
{
if(n== || m==) return;
if(dir[n][m]==)
{
print(n-,m-);
ida[num]=n-;
idb[num++]=m-;
}
else if(dir[n][m]==) print(n-,m);
else print(n,m-);
}
int main()
{
int i,j,m,n,k;
while(cin>>a>>b)
{
n=strlen(a);
m=strlen(b);
memset(ida,,sizeof(ida));
memset(idb,,sizeof(idb));
num=;
LCS(n,m);
print(n,m);
for(i=,j=,k=;k<num;k++)
{
//printf("%d %d\n",ida[k],idb[k]);
for(;i<ida[k];i++)//输出两个重复字符之间的串
printf("%c",a[i]);
i++;//跳过公共部分,避免下面的重复输出
for(;j<idb[k];j++)
printf("%c",b[j]);
printf("%c",b[j++]);//输出公共的部分
}
while(i<n) printf("%c",a[i++]);
while(j<m) printf("%c",b[j++]);
printf("\n");
}
return ;
}

HDU1503Advanced Fruits的更多相关文章

  1. 最长公共子序列(加强版) Hdu 1503 Advanced Fruits

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  2. CodeForces 12C Fruits

    Fruits Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  3. Advanced Fruits(HDU 1503 LCS变形)

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. Advanced Fruits(好题,LCS的模拟)

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. Codeforces Round #252 (Div. 2) B. Valera and Fruits(模拟)

    B. Valera and Fruits time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. HDU1503:Advanced Fruits(LCS)

    Problem Description The company "21st Century Fruits" has specialized in creating new sort ...

  7. hdu 1503 Advanced Fruits(LCS输出路径)

    Problem Description The company "21st Century Fruits" has specialized in creating new sort ...

  8. Pronunciation Guide for 25 Common Fruits

    Pronunciation Guide for 25 Common Fruits Share Tweet Share Tagged With: Vocabulary Words Know how to ...

  9. HDU-1053:Advanced Fruits(LCS+路径保存)

    链接:HDU-1053:Advanced Fruits 题意:将两个字符串合成一个串,不改变原串的相对顺序,可将相同字母合成一个,求合成后最短的字符串. 题解:LCS有三种状态转移方式,将每个点的状态 ...

随机推荐

  1. HTML和CSS的精华

    今天又是周一喽,我们开始啦又一周的学习啦,想一想,在这里学习已经一个月啦,不知什么时间已经习惯啦这种生活,我应该是一个很难适应环境的人啊,但是现在在这里感觉还可以哦,可能是来到这里有自己的目标吧,所以 ...

  2. HTML5中新的结构元素

    HTML5中新的结构元素 1. HTML5初始文件 1.1.doctype 在之前,doctype的声明是这样的: "http://www.w3. org/TR/html4/strict.d ...

  3. Ubuntu 12.04 部署 PostGIS 2.1

    首先,卸载掉原有的postgis和postgresql-9.1-postgis,不然你就用1.5版好了~ 1 sudo dpkg --purge postgis postgresql-9.1-post ...

  4. [SQL] 常用查询脚本

    查询哪些存储过程使用了某个表 select b.name from syscomments a,sysobjects b where a.id=b.id and a.text LIKE '%ftblo ...

  5. dubbo有什么作用

    转自:http://blog.csdn.net/ichsonx/article/details/39008519 1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的R ...

  6. apache+tomcat实现session共享

    apache+tomcat上篇文章,实现了负载均衡,现在我们实现session共享 一.tomcat集群配置,session 同步配置: tomcat1配置  A.修改Engine节点信息: < ...

  7. Gitlab邮箱配置

    一些动作会自动发邮件,比如合并代码等 未验证

  8. C#操作word之插入图片

    假如我们导出一份简历到word文档,那势必可能要同时导出我们包含的简历,下面就来试一下如何和通过C#代码,将图片插入到word文档中. 为了简便起见,就简单一点.类似下面这样的 姓名 张三 照片   ...

  9. Git Bash关键命令

    1.默认目录是C:\Users\用户名 2.切换目录:$cd c:\\windows 3.切换到上级目录:cd ..,中间有空格 4.列出某目录所有文件,相当于DOS下的dir:ls c:\\wind ...

  10. ubuntu打开txt乱码

    因为不支持中文 输入命令: iconv -f gbk -t utf8 filename.txt > filename.txt.utf8