HDU-1503 Advanced Fruits
2017-05-28 14:22
330 查看
原题链接
题目描述:题意:将两个字符串结合起来,他们的公共子序列只输出一次。
代码图解
由上图可写出代码
题目描述:题意:将两个字符串结合起来,他们的公共子序列只输出一次。
代码图解
由上图可写出代码
#include<cstring> #include<iostream> #include<algorithm> using namespace std; char s1[1010],s2[1010]; int maxlen[1010][1010]; int node[1010][1010]; void print(int i,int j) { if(i==0&&j==0)return; if(node[i][j]==0) { print(i-1,j-1); cout<<s1[i-1]; } else if(node[i][j]==1) { print(i-1,j); cout<<s1[i-1]; } else { print(i,j-1); cout<<s2[j-1]; } } int main() { while(cin>>s1>>s2) { int length1=strlen(s1); int length2=strlen(s2); memset(maxlen,0,sizeof(maxlen)); for(int i=0;i<=length1;i++)node[i][0]=1; for(int i=0;i<=length2;i++)node[0][i]=-1; for(int i=1;i<=length1;i++) { for(int j=1;j<=length2;j++) { if(s1[i-1]==s2[j-1]) { maxlen[i][j]=maxlen[i-1][j-1]+1; node[i][j]=0; } else if(maxlen[i-1][j]>maxlen[i][j-1]) { maxlen[i][j]=maxlen[i-1][j]; node[i][j]=1; } else { maxlen[i][j]=maxlen[i][j-1]; node[i][j]=-1; } } } print(length1,length2); cout<<endl; /* for(int i=0;i<=length1;i++) { for(int j=0;j<=length2;j++)cout<<node[i][j]<<" "; cout<<endl; } for(int i=0;i<=length1;i++) { for(int j=0;j<=length2;j++)cout<<maxlen[i][j]<<" "; cout<<endl; } */ ///输出两个数组可知其原理 memset(s1,0,sizeof(s1)); memset(s2,0,sizeof(s2)); } return 0; }
相关文章推荐
- hdu 1503 Advanced Fruits
- HDU 1503 Advanced Fruits(LCS)
- HDU 1503 Advanced Fruits
- hdu 1503 Advanced fruits
- hdu 1503 Advanced Fruits
- hdu 1503 Advanced Fruits(最长公共子序列的应用)
- Advanced Fruits(HDU 1503 LCS变形)
- 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)
- HDU 1503Advanced Fruits LCS变形之字母存储+递归
- HDU 1503 Advanced Fruits(LCS+输出路径~)
- HDU 1503 - Advanced Fruits