hdu 1503 Advanced Fruits
来源:互联网 发布:雾月政变 知乎 编辑:程序博客网 时间:2024/05/18 03:52
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503
题目描述:
题目大意:给你两个字符串,然后输出一个新的字符串,要求两个字符串的最长公共字串只输出一次
题目分析:
同求最长公共子序列,这里需要注意的地方就是这里需要输出,那么我们就开两个数组记录一下公共部分在两个字符串中的下标
Ac代码:
#include<iostream>#include<cstring>#include<cmath>#include<cstdio>#include<algorithm>using namespace std;int dp[105][105];char s1[105],s2[105];int cnt;struct node{ int x,y;//x记录s1的起始位置,y记录s2的起始位置 char tmp;//tmp记录字符}v[105];void LCS(int m,int n){ memset(dp,0,sizeof(dp)); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(s1[i]==s2[j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } }//dp[i][j]代表s1从1->i,s2从1->j最长公共子序列的长度 cnt=1; int len=dp[m][n]; if(!dp[m][n]) return; else { int i=m,j=n; while(len>0) { if(s1[i]==s2[j]) { v[cnt].x=i;//记录起始位置 v[cnt].y=j; v[cnt].tmp=s1[i]; i--; j--; len--; cnt++; } else if(dp[i-1][j]>dp[i][j-1]) i--; else j--; } }}int main(){ while(scanf("%s%s",s1+1,s2+1)!=EOF) { int m=strlen(s1+1),n=strlen(s2+1); LCS(m,n); cnt--; int i=1,j=1; while(i<=m||j<=n) { while(i!=v[cnt].x&&i<=m) { printf("%c",s1[i]); i++; } while(j!=v[cnt].y&&j<=n) { printf("%c",s2[j]); j++; } if(cnt>=1) { printf("%c",v[cnt].tmp); cnt--; i++; j++; } } 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 ]
- Android之数据库更新
- Netty Notes
- Java开篇了
- iOS NSURLErrorDomain Code=-999
- Java传参的值传递和引用传递问题(转)
- hdu 1503 Advanced Fruits
- arm-linux的gdb移植
- 摇一摇开发的关键性代码
- iOS CoreAnimation-粒子动画
- 嵌入式开发中对db2 null字段的处理
- CSS3动画简单应用
- C#结构
- ajax报:The URI scheme corresponds to an unknown protocol handler
- Android 手机信号强度