hdu 1503 Advanced Fruits
来源:互联网 发布:3米距离买多大电视知乎 编辑:程序博客网 时间:2024/05/21 06:31
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1503
题意:给你两个字符串,要你用这两个字符串组成这样一个字符串,在组成的字符串中字符的相对顺序不变的情况下,可以在组成的字符串中找到原先两个字符串,字母可以错开,但是相对顺序不能变化,要这个组成的字符串中字母数最少,并输出这个字符串。
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;char s1[105],s2[105];int dp[105][105],vis[105][105];int len1,len2;void LCS(){ int i,j; for(i=0;i<=len1;i++) vis[i][0]=2; for(i=0;i<=len2;i++) vis[0][i]=3; 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; vis[i][j]=1; } else if(dp[i-1][j]>dp[i][j-1]) { dp[i][j]=dp[i-1][j]; vis[i][j]=2; } else { dp[i][j]=dp[i][j-1]; vis[i][j]=3; } } }}void Pri(int x,int y){ if(x==0&&y==0) return; if(vis[x][y]==1) { Pri(x-1,y-1); printf("%c",s1[x-1]); } else if(vis[x][y]==2) { Pri(x-1,y); printf("%c",s1[x-1]); } else { Pri(x,y-1); printf("%c",s2[y-1]); }}int main(){ while(scanf("%s%s",s1,s2)!=EOF) { for(int i=0;i<105;i++) dp[i][0]=dp[0][i]=0; len1=strlen(s1),len2=strlen(s2); LCS(); Pri(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 ]
- 数据降维
- 获取用户IP的方法
- C++学习 - Map的了解
- 常用引用页面标签的区别
- 导出excel
- hdu 1503 Advanced Fruits
- 排序算法之堆排序
- pdf转换成word转换器免费版哪里下载
- vector的用法
- iOS[正解] - 获取AppDelegate
- HTTP状态码302、303和307
- Linux上的free命令详解
- 黑马程序员------JAVA学习笔记之JAVA语言基础
- js小技巧-判断表格是否被选中