最长公共子序列(加强版) Hdu 1503 Advanced Fruits
Advanced Fruits
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1426 Accepted Submission(s):
719
Special Judge
creating new sorts of fruits by transferring genes from one fruit into the
genome of another one. Most times this method doesn't work, but sometimes, in
very rare cases, a new fruit emerges that tastes like a mixture between both of
them.
A big topic of discussion inside the company is "How should the new
creations be called?" A mixture between an apple and a pear could be called an
apple-pear, of course, but this doesn't sound very interesting. The boss finally
decides to use the shortest string that contains both names of the original
fruits as sub-strings as the new name. For instance, "applear" contains "apple"
and "pear" (APPLEar and apPlEAR), and there is no shorter string that has the
same property.
A combination of a cranberry and a boysenberry would
therefore be called a "boysecranberry" or a "craboysenberry", for example.
Your job is to write a program that computes such a shortest name for a
combination of two given fruits. Your algorithm should be efficient, otherwise
it is unlikely that it will execute in the alloted time for long fruit names.
represent the names of the fruits that should be combined. All names have a
maximum length of 100 and only consist of alphabetic characters.
Input is
terminated by end of file.
resulting fruit on one line. If more than one shortest name is possible, any one
is acceptable.
/*
例如 apple peach
p e a c h
0 0 0 0 0 0
a 0 0 0 1 1 1
p 0 1 1 1 1 1
p 0 1 1 1 1 1
l 0 1 1 1 1 1
e 0 1 2 2 2 2
*/
#include<iostream>
#include <cstring>
using namespace std;
#define MAX 105
char ch1[MAX],ch2[MAX],ch[MAX];
int dp[MAX][MAX];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int i,j,k;
int m,n;
while(cin.getline(ch1,MAX,' ') && cin.getline(ch2,MAX,'\n'))
{
m = strlen(ch1);
n = strlen(ch2);
for(i=;i<=n;i++)
dp[][i] = ;
for(j=;j<=m;j++)
dp[j][] = ;
for(i=;i<=m;i++)
for(j=;j<=n;j++)
if(ch1[i-] == ch2[j-])
dp[i][j] = dp[i-][j-] + ;
else
dp[i][j] = max(dp[i-][j],dp[i][j-]);
//以上是求最长公共子序列
i = strlen(ch1),j = strlen(ch2);
k=;
while(i!= || j!=) //将所求的序列保存在数组ch中,从后往前依次比较两个数组
{
if(i==) //说明数组ch2还有剩余元素
{
ch[k++] = ch2[j-];
j--;
continue;
}
else if(j==) //说明数组ch1还有剩余元素
{
ch[k++] = ch1[i-];
i--;
continue;
}
else if(ch1[i-] != ch2[j-])
{
if(dp[i][j] == dp[i][j-])
{
ch[k++] = ch2[j-];
j--;
continue;
}
else if(dp[i][j] == dp[i-][j])
{
ch[k++] = ch1[i-];
i--;
continue;
}
}
else
{
ch[k++] = ch1[i-];
i--;j--;
continue;
}
}
for (i=k-;i>=;i--)
cout<<ch[i];
cout<<endl;
memset(ch1,,sizeof(ch1));
memset(ch2,,sizeof(ch2));
}
return ;
}
最长公共子序列(加强版) Hdu 1503 Advanced Fruits的更多相关文章
- hdu 1503 Advanced Fruits(最长公共子序列)
Advanced Fruits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1503 Advanced Fruits 最长公共子序列 *
Advanced Fruits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 题解报告:hdu 1503 Advanced Fruits(LCS加强版)
Problem Description The company "21st Century Fruits" has specialized in creating new sort ...
- hdu 1503 Advanced Fruits
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503 思路:这是一道最长公共子序列的题目,当然还需要记录路径.把两个字符串的最长公共字串记录下来,在递 ...
- hdu 1503:Advanced Fruits(动态规划 DP & 最长公共子序列(LCS)问题升级版)
Advanced Fruits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1503 Advanced Fruits(DP)
题意: 将两个英文单词进行合并.[最长公共子串只要保留一份] 输出合并后的英文单词. 思路: 求最长公共子串. 记录路径: mark[i][j]=-1:从mark[i-1][j]转移而来. mark[ ...
- caioj 1073 动态规划入门(三维一边推:最长公共子序列加强版(三串LCS))
三维的与二维大同小异,看代码. #include<cstdio> #include<cstring> #include<algorithm> #define REP ...
- HDU 1503 Advanced Fruits(LCS+记录路径)
http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意: 给出两个串,现在要确定一个尽量短的串,使得该串的子串包含了题目所给的两个串. 思路: 这道题目就是 ...
- hdu 1503 Advanced Fruits(LCS输出路径)
Problem Description The company "21st Century Fruits" has specialized in creating new sort ...
随机推荐
- 隐藏Jquery dialog 按钮
$(".ui-dialog-buttonpane button").hide(); //隐藏dialog中所有button $(".ui-dialog-buttonpan ...
- 一个简单的零配置命令行HTTP服务器 - http-server (nodeJs)
http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不想重复的写 nodeJs 的 web-server.js, 则可以使用这个. 安装 (全局安装加 -g) ...
- Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- SQL server 语言基础
数据库: 1. 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理员(D ...
- jquery 多选框的问题
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 一次熬夜解决的java乱码问题
在java API中String有一个方法 public byte[] getBytes() Encodes this String into a sequence of bytes using t ...
- 【转】在sqlserver下增加MYSQL的链接服务器,实现分布式数据库开发第一步
首先要在SQLserver上服务器上这装ODBC对mysql的支持,我下载了mysql-connector-odbc-5.1.5-win32.rar,安装后在ODBC中有了DRIVER={MySQL ...
- 【SIGGRAPH】用【有说服力的照片真实】技术实现最终幻想15的视觉特效
原文:西川善司 http://www.4gamer.net/games/075/G007535/20160726064/ 最终幻想15的演讲会场.相当大,听众非常多. 在本次计算机图形和 ...
- Android Http请求方法汇总
[转] 原文 这篇文章主要实现了在Android中使用JDK的HttpURLConnection和Apache的HttpClient访问网络资源,服务端采用python+flask编写,使用Serv ...
- SQL ORDER BY 子句
ORDER BY 语句用于对结果集进行排序. ORDER BY 语句 ORDER BY 语句用于根据指定的列对结果集进行排序. ORDER BY 语句默认按照升序对记录进行排序. 如果您希望按照降序对 ...