uva 10635 - Prince and Princess(LCS)
2013-09-21 11:41
351 查看
题目连接:10635 - Prince and Princess
题目大意:给出n, m, k,求两个长度分别为m + 1 和 k + 1且由1~n * n组成的序列的最长公共子序列长的。
解题思路:按一般的o(n^2)的算法超时了,所以上网查了下LCS装换成LIS的算法o(nlogn)。算法仅仅是将其中的一个序列重新标号1~m,然后按最长公共子序列的方法去做。
题目大意:给出n, m, k,求两个长度分别为m + 1 和 k + 1且由1~n * n组成的序列的最长公共子序列长的。
解题思路:按一般的o(n^2)的算法超时了,所以上网查了下LCS装换成LIS的算法o(nlogn)。算法仅仅是将其中的一个序列重新标号1~m,然后按最长公共子序列的方法去做。
#include <stdio.h> #include <string.h> const int N = 90000; int n, m, k, w , g ; int read() { int a; memset(g, 0, sizeof(g)); memset(w, 0, sizeof(w)); scanf("%d%d%d", &n, &m, &k); for (int i = 0; i <= m; i++) { scanf("%d", &a); w[a] = i + 1; } for (int i = 0; i <= k; i++) scanf("%d", &g[i]); } int solve() { int dp , cnt = 0; memset(dp, 0, sizeof(dp)); for (int i = 0; i <= k; i++) { if (!w[g[i]]) continue; int flag = 1; for (int j = 0; j < cnt; j++) { if (w[g[i]] < w[dp[j]]) { dp[j] = g[i]; flag = 0; break; } } if (flag) dp[cnt++] = g[i]; } return cnt; } int main() { int cas, t = 1; scanf("%d", &cas); while (cas--) { read(); printf("Case %d: %d\n", t++, solve()); } return 0; }
相关文章推荐
- 一中OJ #1434 序列的LCS [UVa 10635 -> Prince and Princess] | 动态规划 LCS映射转换LIS | 解题报告
- UVa 10635 Prince and Princess / LCS 转 LIS
- UVA 10635 Prince and Princess (LCS优化转LIS)
- uva 10635 Prince and Princess (将LCS 转化为 LIS)
- uva 10635 - Prince and Princess LCS
- UVa 10635 Prince and Princess(LCS N*logN)
- UVa 10635 Prince and Princess(LCS nlogn)
- uva 10635-Prince and Princess 【LIS 求解 LCS】
- uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))
- UVA 10635 Prince and Princess(LCS转LIS)
- Uva - 10635 - Prince and Princess(LCS转LIS)
- 【UVA 10635】【LCS转化成LIS】 Prince and Princess
- UVA - 10635 Prince and Princess LCS转LIS
- uva 10635 - Prince and Princess(LCS)
- uva 10635 Prince and Princess(LCS问题转化成LIS问题O(nlogn))
- UVa 10635 - Prince and Princess 问题转化..LCS巧妙算法..
- Uva 10635 Prince and Princess (LCS变形LIS)
- UVA 10635 Prince and Princess(LCS)
- UVa 10635 - Prince and Princess(LCS转LIS)
- uva 10635 - Prince and Princess lcs->lis 2018-2-8