LightOJ - 1110 An Easy LCS(LCS)
2015-10-31 23:00
330 查看
题目大意:问你两个字符串的LCS,并输出最小字典序的LCS
解题思路:按照LCS的思路,找寻的时候并判断字典序即可
解题思路:按照LCS的思路,找寻的时候并判断字典序即可
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 110; char s1 , s2 ; int len1, len2, cas = 1; int dp ; char str ; void init() { scanf("%s%s", s1 + 1, s2 + 1); len1 = strlen(s1 + 1); len2 = strlen(s2 + 1); } void solve() { memset(dp, 0, sizeof(dp)); for (int i = 1; i <= len1; i++) for (int j = 1; j <= len2; j++) { if (s1[i] == s2[j]) { dp[i][j] = dp[i - 1][j - 1] + 1; for (int k = 0; k < dp[i - 1][j - 1]; k++) str[i][j][k] = str[i - 1][j - 1][k]; str[i][j][dp[i - 1][j - 1]] = s1[i]; str[i][j][dp[i - 1][j - 1] + 1] = '\0'; } else { dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); if ((dp[i - 1][j] == dp[i][j - 1] && strcmp(str[i - 1][j], str[i][j - 1]) <= 0) || (dp[i - 1][j] > dp[i][j - 1])) { for (int k = 0; k <= dp[i - 1][j]; k++) str[i][j][k] = str[i - 1][j][k]; } else { for (int k = 0; k <= dp[i][j - 1]; k++) str[i][j][k] = str[i][j - 1][k]; } } } if (dp[len1][len2] == 0) printf("Case %d: :\(\n", cas++); else printf("Case %d: %s\n", cas++, str[len1][len2]); } int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } return 0; }
相关文章推荐
- Game(bc模拟题)
- codevs2597团伙
- Oracle实战——简介、安装与配置
- linux多线程编程--信号量和条件变量 唤醒丢失事件
- 编程能力与编程年龄
- C语言中断言ASSERT
- hdu 1049 Climbing Worm
- 常用设计模式之装饰模式
- 面试总结+网上查阅的智力题
- 广东省国家税务局增值税发票升级版应用级容灾系统建设项目-100万
- LightOJ - 1119 Pimp My Ride(状态压缩)
- 约瑟夫环递归求解
- 线程组threadgroup、线程池threadpool
- [hdu5525 Product]暴力
- 《软件需求模式》阅读笔记三
- 将一个无符号十进制数的二进制逆转,然后以输出
- Java各种字符串连接方法性能比较
- java 发展简史
- RecyclerView的点击事件
- 细说Debug和Release区别