HDU 1503 Advanced Fruits
来源:互联网 发布:windows xp怎么看配置 编辑:程序博客网 时间:2024/06/04 18:36
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.
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 is terminated by end of file.
apple peachananas bananapear peach
#include<iostream>#include<cstdio>#include<cstring>using namespace std;char s1[1005];char s2[1005];int len1,len2;int dp[1005][1005];int mark[1005][1005];void LCS(){ int i,j; memset(dp,0,sizeof(dp)); for(i=0;i<=len1;i++) { mark[i][0]=1; } for(i=0;i<=len2;i++) { mark[0][i]=-1; } for(i=1;i<=len1;i++) { for(j=1;j<=len2;j++) { if(s1[i-1]==s2[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 if(dp[i][j-1]>=dp[i-1][j]) { dp[i][j]=dp[i][j-1]; mark[i][j]=-1; } } }}void Print(int i,int j){ if(!i&&!j) return ; if(mark[i][j]==0) { Print(i-1,j-1); printf("%c",s1[i-1]); } else if(mark[i][j]==1) { Print(i-1,j); printf("%c",s1[i-1]); } else { Print(i,j-1); printf("%c",s2[j-1]); }}int main(){ while(~scanf("%s%s",s1,s2)) { len1=strlen(s1); len2=strlen(s2); LCS();//最长公共字串长度 Print(len1,len2); printf("\n"); } return 0;}
0 0
- HDU 1503 Advanced Fruits
- HDU 1503 Advanced Fruits
- HDU 1503 - Advanced Fruits
- hdu 1503 Advanced Fruits
- hdu 1503 Advanced Fruits
- hdu 1503 Advanced Fruits
- hdu 1503 advanced fruits
- HDU 1503 Advanced Fruits
- hdu 1503 Advanced Fruits
- hdu 1503 Advanced Fruits
- hdu 1503 Advanced fruits
- HDU 1503 Advanced Fruits
- hdu 1503 Advanced Fruits
- hdu 1503 Advanced Fruits
- HDU 1503 Advanced Fruits
- HDU 1503 Advanced Fruits
- HDU-1503 Advanced Fruits
- HDU 1503 Advanced Fruits[ LCS ]
- AndroidStudio 编译C/C++文件生成SO文件
- Bootstrapvalidator表单验证+ 模态框 Ajax请求 Demo
- jsp有哪些内置对象?作用分别是什么?
- windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
- TensorFlow入门(七) 充分理解 name / variable_scope
- HDU 1503 Advanced Fruits
- Module 'mysql' already loaded in Unknown on line 0解决方法
- SOA面向服务的架构 学习分享
- Redo Log File(inactive、active)损坏,处理恢复对策
- js中getDay()和getDate(),常用的时间函数
- laravel5基础用法
- 【PM】【进度】:把握项目节奏的方法
- IntelliJ使用指南—— 导入Eclipse的Web项目
- 初识Java之概念