hdoj 1503 Advanced Fruits (LCS 变形合并)

来源:互联网 发布:淘宝售后率高 编辑:程序博客网 时间:2024/06/06 14:45

Advanced Fruits

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2995    Accepted Submission(s): 1531
Special Judge


Problem Description
The company "21st Century Fruits" has specialized in 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.
 

Input
Each line of the input contains two strings that 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.
 

Output
For each test case, output the shortest name of the resulting fruit on one line. If more than one shortest name is possible, any one is acceptable.
 

Sample Input
apple peachananas bananapear peach
 

Sample Output
appleachbananaspearch
 

Source
University of Ulm Local Contest 1999
 

题目大意:两个字符串输出  其公共部分合并只输出一次

思路:把动态规划状态转移方程遍历到的状态进行标记,从大到小遍历dp[ i ][ j ]路径,从小到大回溯输出

代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a[110],b[110];//输入字符串 int mark[110][110],dp[110][110];//标记状态  //记录路径 int len1,len2;void LCS(){int i,j;memset(dp,0,sizeof(dp));for(i=0;i<=len1;i++)mark[i][0]=1;for(j=0;j<=len2;j++)mark[0][j]=-1;for(i=1;i<=len1;i++){for(j=1;j<=len2;j++){if(a[i-1]==b[j-1]){dp[i][j]=dp[i-1][j-1]+1;mark[i][j]=0; }  else if(dp[i-1][j]>=dp[i][j-1]) { dp[i][j]=dp[i-1][j]; mark[i][j]=1; } else { dp[i][j]=dp[i][j-1]; mark[i][j]=-1; }}} }   void out(int i,int j)//遍历路径  回溯输出  { if(!i&&!j) return ; if(mark[i][j]==0) { out(i-1,j-1); printf("%c",a[i-1]); } else if(mark[i][j]==1) { out(i-1,j); printf("%c",a[i-1]); } else { out(i,j-1); printf("%c",b[j-1]); } }int main(){while(~scanf("%s%s",&a,&b)){len1=strlen(a);len2=strlen(b);LCS();out(len1,len2);printf("\n");}return 0; } 

做了这道题,对LCS的状态转移方程又有了更清晰的认识,求LCS时他的路径也是唯一的

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 入住淘宝主播没有微博粉丝怎么办 手机淘宝领金币怎么没有了怎么办 淘宝荬家缺货对付款买家怎么办 淘宝买家确认收货后申请退款怎么办 淘宝东西失效了但付过款了怎么办 淘宝图片被投诉盗图怎么办原图没了 淘宝退款申请不小心撤销了怎么办 淘宝不小心点了撤销退款怎么办 淘宝上退款不小心撤销了怎么办 新店淘宝卖家想开通直播怎么办 想开通淘宝直播却没有粉丝怎么办 淘宝店家拒绝给我改地址怎么办0 淘宝被投诉卖假申诉失败怎么办 要退保证金但是有人买东西了怎么办 手机淘宝上我是商家停止服务怎么办 淘宝上买的电脑商家关闭了怎么办 淘宝链接复制链链接发不出去怎么办 淘宝卖家填错地址货已经发了怎么办 拼多多没交保证金无法提现怎么办 信用卡被别人刷了没证据怎么办 我在淘宝开个店卖衣服没人买怎么办 收货地址填错了卖家已发货怎么办 淘宝店上的供货商不发货怎么办 在淘宝买的花退到卖家后死了怎么办 在淘宝买东西付款开通了花呗怎么办 淘宝网投诉卖家也不处理问题怎么办 淘宝图片空间上传不了大图片怎么办 不小心把设置里打印机删掉了怎么办 电脑上qq不小心删掉了怎么办 进了一批款式不好卖的衣服怎么办? 淘宝首页图片不居中代码装的怎么办 小语言代码装修以后不是全屏怎么办 招教年龄超过4个月怎么办 淘宝上注册的店铺被别人用了怎么办 淘宝贷款后店铺转让了贷款怎么办 手机千牛发布宝贝类目找不到怎么办 亚马逊被移除销售权该怎么办 玉米煮水不够熟吃了怎么办 华为云手机找回关了找回手机怎么办 我的淘宝号被别人盗用开店怎么办 淘宝买东西发货了不想要了怎么办