uva 10635(最长公共子序列nlogn)
来源:互联网 发布:单片机温度控制器 编辑:程序博客网 时间:2024/05/16 18:17
题意:给出两个串,输出最长公共子序列。
题解:直接用n^2的方法会超时,需要将问题转化成计算最长上升子序列,然后可以用二分来减小时间复杂度。
方法是用一个数组将第一个串内元素在第二个串内的位置保存下来,然后将这个数组的最长上升子序列长度求出就是解。
#include <stdio.h>#include <string.h>#include <map>#include <algorithm>using namespace std;const int N = 62500;int n, p, q;int s1[N], s2[N];map<int, int> pos;int LIS(int len) {int k = 1;s2[1] = s1[1];for (int i = 2; i <= len; i++) {if (s1[i] > s2[k])s2[++k] = s1[i];else {int l = 1, r = k, mid;while (l < r) {mid = (l + r) / 2;if (s2[mid] < s1[i])l = mid + 1;elser = mid;}s2[l] = s1[i];}}return k;}int main() {int t, cas = 1;scanf("%d", &t);while (t--) {pos.clear();scanf("%d%d%d", &n, &p, &q);int temp;for (int i = 1; i <= p + 1; i++) {scanf("%d", &temp);pos[temp] = i;}int k = 1;for (int i = 1; i <= q + 1; i++) {scanf("%d", &temp);if (pos[temp])s1[k++] = pos[temp];}printf("Case %d: %d\n", cas++, LIS(k - 1));}return 0;}
0 0
- uva 10635(最长公共子序列nlogn)
- 最长公共子序列(nlogn)
- Uva 10635 - Prince and Princess(最长公共子序列 nlogn 算法)
- 最长公共子序列O(nlogn)
- 最长公共子序列的NlogN解法
- 最长公共子序列nlogn算法
- P3402 最长公共子序列(nlogn)
- uva 10534 nlogn最长上升子序列
- lcs 最长公共子序列 O(nlogn)算法
- 最长公共子序列 (lcs)O(nlogn)算法
- 最长公共子序列的nlogn算法——bsoj1139
- 洛谷 [p1439] 最长公共子序列 (NlogN)
- 最长递增子序列(nlogn),最长公共子串(连续),最长公共子序列(不连续)
- UVA 10635 Prince and Princess 最长公共子序列
- UVA 10635 Prince and Princess 最长公共子序列(nlongn)
- UVA 10635 Prince and Princess(最长公共子序列)
- 最长公共子序列uva--111
- Vacation - UVa 10192 最长公共子序列
- javascript 闭包的理解
- C语言顺序表链式存储(链表)
- 生活感悟
- 写一个函数返回参数值为1的个数
- 开放性敏捷自动化测试架构介绍
- uva 10635(最长公共子序列nlogn)
- Program received signal :"SIGKILL"
- leetcode - plus one
- 参加某培训机构Java培训记录(十一)
- 第一阶段项目总结
- Android旋转屏幕后国际化语言失效的解决办法
- 主设备号--驱动模块与设备节点联系的纽带
- VC导出类得创建和使用
- HDU 1027 Ignatius and the Princess II