HDU 5495:LCS
LCS
你有两个序列\{a_1,a_2,...,a_n\}{a1,a2,...,an}和\{b_1,b_2,...,b_n\}{b1,b2,...,bn}. 他们都是11到nn的一个排列. 你需要找到另一个排列\{p_1,p_2,...,p_n\}{p1,p2,...,pn}, 使得序列\{a_{p_1},a_{p_2},...,a_{p_n}\}{ap1,ap2,...,apn}和\{b_{p_1},b_{p_2},...,b_{p_n}\}{bp1,bp2,...,bpn}的最长公共子序列的长度最大.
输入有多组数据, 第一行有一个整数TT表示测试数据的组数. 对于每组数据: 第一行包含一个整数n (1 \le n \le 10^5)n(1≤n≤105), 表示排列的长度. 第2行包含nn个整数a_1,a_2,...,a_na1,a2,...,an. 第3行包含nn个整数 b_1,b_2,...,b_nb1,b2,...,bn. 数据中所有nn的和不超过2 \times 10^62×106.
对于每组数据, 输出LCS的长度.
2
3
1 2 3
3 2 1
6
1 5 3 2 6 4
3 6 2 4 5 1
2
4
题目中给出的是两个排列, 于是我们可以先把排列分成若干个环, 显然环与环之间是独立的. 事实上对于一个长度为l
(l > 1)l(l>1)的环,
我们总可以得到一个长度为l-1l−1的LCS,
于是这个题的答案就很明显了, 就是nn减去长度大于11的环的数目.
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; const int maxn=1e5+10;
bool vis[maxn]; struct node
{
int a,b;
}p[maxn]; bool cmp(node x,node y)
{
return x.a<y.a;
}
int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout);
int T ;
cin>>T;
while(T--)
{
memset(vis,0,sizeof(vis));
int n; scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&p[i].a);
for(int i=1;i<=n;i++) scanf("%d",&p[i].b);
sort(p+1,p+1+n,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
if(vis[i]) continue;
vis[i]=1;
if(p[i].a==p[i].b) ans++;
else
{
int pos=p[i].b;
while(!vis[pos])
{
ans++;
vis[pos]=1;
pos=p[pos].b;
}
}
}
printf("%d\n",ans);
}
//system("pause");
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 5495:LCS的更多相关文章
- hdu 5495 LCS
Problem Description You are given two sequence {a1,a2,...,an} and {b1,b2,...,bn}. Both sequences are ...
- HDU - 6409:没有兄弟的舞会(数学+思维)
链接:HDU - 6409:没有兄弟的舞会 题意: 题解: 求出最大的 l[i] 的最大值 L 和 r[i] 的最大值 R,那么 h 一定在 [L, R] 中.枚举每一个最大值,那么每一个区间的对于答 ...
- POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)
http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...
- hdu 5495 LCS 水题
LCS Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5495 Descr ...
- HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意: 给你一个字符串s,你可以在s中的任意位置添加任意字符,问你将s变成一个回文串最少需要添加 ...
- HDU 1159 Common Subsequence:LCS(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意: 求最长公共子序列. 题解: (LCS模板题) 表示状态: dp[i][j] = max ...
- hdu 5495 LCS(并查集)
Problem Description You are given two sequence {a1,a2,...,an} and {b1,b2,...,bn}. Both sequences are ...
- HDU 1159:Common Subsequence(LCS模板)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 5495 LCS (置换群)
Sample Input231 2 33 2 161 5 3 2 6 43 6 2 4 5 1 Sample Output24 C/C++: #include <map> #includ ...
随机推荐
- 浅谈区块链和p2p网络
最近对区块链产生了兴趣就去了解了一下,分享一下.... 首先要先了解一下什么叫做区块链: 区块链:简单来说就是一种基于分布式数据存储.点对点传输.共识机制.加密算法等计算机技术的新型应用模式. 相信说 ...
- 使用 TestFight 构建 Beta 测试版本
---恢复内容开始--- Beta测试属于软件开发周期中的一环,测试的重点就是让一些活生生的人去使用你的App,不断测试然后反馈.你需要让你的测试成员发现尽可能多的bug,以便你在公开发布之前将其修复 ...
- 解题报告:luogu P2220
指挥使走后一脸懵逼,然后想起了一道水\(SB\)的省选题. 这是毒瘤乘法分配率的应用,似乎还有一篇,算是入门题. 对了,这题连接:P2220 [HAOI2012]容易题 然而蒟蒻还是先自闭了一会... ...
- A easy and simple way to establish Oracle ADG
Yes, thanks to Then, I can give simple and reasy way to make it. Suppose hosts and IPs like that: 15 ...
- ABC154F - Many Many Paths
梦回高中,定义的f(i,j)为从(0,0)到(i,j)一共有多少条路可以选择,易知我们要做i+j次选择,其中有i次是选择x轴,剩下的是y轴,所以f(i,j)=C(i+j,i)=C(i+j,j),给你一 ...
- Swift-关于Swift编程语言
一.首先让我们看看苹果公司是怎么描述自己的Swift的: Swift 是编写程序的绝佳选择,无论是手机.电脑还是服务器,任何能跑代码的设备都是如此.它是一门集现代语言之大成,集结了苹果的工程师文化精髓 ...
- python中时间戳的探索
声明 本文章只针对python3.6及以上版本. 问题提出 首先,我们先import一些必要模块: In [1]: from datetime import datetime, timezone, t ...
- PAT乙级完结有感
去年10月开始刷的题,拖拖拉拉的终于借这个假期刷完了,总的来说还是有点小激动的,毕竟,第一次刷完一个体系,在这之前,我在杭电.南阳.洛谷.leetcode.以及我们自己学校的OJ上刷过,但都没有完完整 ...
- Linux和云供应商Red Hat被IBM以34亿美元的价格收购
导读 今天的主题包括IBM以340亿美元收购Red Hat,人性化是使人工智能成功的关键.两家公司于10月28日宣布,IBM正以340亿美元的价格收购Linux和云技术供应商Red Hat,以期改变云 ...
- SpringCloud实战——(4)基于Eureka、Zuul