UVA 10653.Prince and Princess
题目
In an n * n
chessboard, Prince and Princess plays a game. The squares in the chessboard are numbered 1, 2, 3 ... n*n
, as shown below:
Prince stands in square 1
, make p
jumps and finally reach square n*n
. He enters a square at most once. So if we use xp
to denote the p-th square he enters, then x1, x2, ... xp+1
are all different. Note that x1 = 1
and xp+1 = n*n
. Princess does the similar thing - stands in square 1
, make q
jumps and finally reach square n*n
. We use y1, y2 , ... yq+1
to denote the sequence, and all q+1
numbers are different.
Figure 2 belows show a 3x3
square, a possible route for Prince and a different route for Princess.
The Prince moves along the sequence: 1 --> 7 --> 5 --> 4 --> 8 --> 3 --> 9
(Black arrows), while the Princess moves along this sequence: 1 --> 4 --> 3 --> 5 --> 6 --> 2 --> 8 --> 9
(White arrow).
The King -- their father, has just come. "Why move separately? You are brother and sister!" said the King, "Ignore some jumps and make sure that you're always together."
For example, if the Prince ignores his 2nd, 3rd, 6th jump, he'll follow the route: 1 --> 4 --> 8 --> 9
. If the Princess ignores her 3rd, 4th, 5th, 6th jump, she'll follow the same route: 1 --> 4 --> 8 --> 9
, (The common route is shown in figure 3) thus satisfies the King, shown above. The King wants to know the longest route they can move together, could you tell him?
Input
The first line of the input contains a single integer t(1 <= t <= 10)
, the number of test cases followed. For each case, the first line contains three integers n, p, q(2 <= n <= 250, 1 <= p, q < n*n)
. The second line contains p+1 different integers in the range [1..n*n]
, the sequence of the Prince. The third line contains q+1
different integers in the range [1..n*n]
, the sequence of the Princess.
Output
For each test case, print the case number and the length of longest route. Look at the output for sample input for details.
Sample
Sample Input
1
3 6 7
1 7 5 4 8 3 9
1 4 3 5 6 2 8 9
Output for Sample Input
Case 1: 4
题目大意
求一个最长公共子序列LCS,每个序列没有重复元素。
思路:
- 求解最长公共子序列。即,先扫一遍第一个序列,记录一下。然后扫一遍第二个序列,把与第一个序列重复的元素位置记录。最后求一个LIS。
- 这道题可以用map来对应,在这里我们用数组来做一个映射
fa[a[i]]=i
,就是代表其序列编号,然后将b中的元素b[i]
对应的a[i]
的序列编号输出到fb[]
数组中,再求出fb[]
的LIS即可。 - 这道题暗含序列不会重复。
代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define cle(a) memset(a,0,sizeof(a))
const int Inf=0X3f3f3f3f,maxn=100000;
int n,a[maxn],b[maxn],dp[maxn],fa[maxn],fb[maxn];
int main(){
int T; scanf("%d",&T);
int all=T;
while(T--){
cle(a);cle(b);cle(fa);cle(fb);cle(dp);
int n,p,q;
scanf("%d%d%d",&n,&p,&q);
for(int i=1;i<=p+1;i++){
scanf("%d",&a[i]);
fa[a[i]]=i;
}
for(int i=1;i<=q+1;i++){
scanf("%d",&b[i]);
fb[i]=fa[b[i]];
}
for(int i=1;i<=q+1;i++) dp[i]=1;
for(int i=1;i<=q+1;i++){
int max_=0;
for(int j=1;j<i;j++)
if(fb[j]<fb[i]) max_=max(max_,dp[j]);
dp[i]+=max_;
}
int ans=0;
for(int i=1;i<=q+1;i++)
ans=max(ans,dp[i]);
printf("Case %d: %d\n",all-T,ans);
}
return 0;
}
UVA 10653.Prince and Princess的更多相关文章
- uva 10635 - Prince and Princess(LCS)
题目连接:10635 - Prince and Princess 题目大意:给出n, m, k,求两个长度分别为m + 1 和 k + 1且由1~n * n组成的序列的最长公共子序列长的. 解题思路: ...
- UVA - 10635 Prince and Princess LCS转LIS
题目链接: http://bak.vjudge.net/problem/UVA-10635 Prince and Princess Time Limit: 3000MS 题意 给你两个数组,求他们的最 ...
- [题解]UVa 10635 Prince and Princess
讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对 ...
- Uva 10635 - Prince and Princess 问题转化,元素互不相同(在自身序列中独特)的两个数列的LCS,LIS 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVa 10635 Prince and Princess - 动态规划
讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对 ...
- UVA 10635 - Prince and Princess LCS转化为LIS
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- Uva 10635 - Prince and Princess LCS/LIS
两个长度分别为p+1和q+1的由1到n2之前的整数组成的序列,每个序列的元素各不相等,两个序列第一个元素均为1.求两个序列的最长公共子序列 https://uva.onlinejudge.org/in ...
- UVA 10635 Prince and Princess
题意描述:有两个长度分别为p+1和q+1的序列,每个元素中的各个元素互不相同.都是1~n^2之间的整数,求A和B的最长公共子序列.(2<=n<=250,1<=p,q<=n^2) ...
- uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))
标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...
随机推荐
- phpmyadmin通过慢查询日志getshell连载(二)
这是phpmyadmin系列渗透思路的第二篇文章,前面一篇文章阐述了通过全局日志getshell,但是还有一个日志可以getshell,那就是本次实验的慢查询日志,操作类似,毕竟实战中多一条路就多一次 ...
- 15.DRF-分页
Django rest framework(6)----分页 第一种分页 PageNumberPagination 基本使用 (1)urls.py urlpatterns = [ re_path('( ...
- Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...
- struct2面试准备
二 工作流程1.客户端浏览器发出HTTP请求.2.根据web.xml配置,该请求被FilterDispatcher接收3.根据struts.xml配置,找到需要调用的Action类和方法, 并通过Io ...
- Unity常见的三种数据本地持久化方案
做游戏的时候常常会有数据配置或者存读档的需求,本文整理了常用的几种解决方案,分别是Unity自带的PlayerPrefs类,XML文件和Json文件. 一. PlayerPrefs 这是Unity自带 ...
- shell基本正则表达式
基本正则表达式 星号* 匹配它前面的字符串或正则表达式任意次(包括0次).比如,“1122*” 将匹配11+1个或多个2,其可能匹配的字符串将是112.1122.112222.11223343等 句点 ...
- git和github入门指南(4)
4.分支管理 4.1.什么是分支? 分支可以简单的理解为分叉,在主干上长出一条枝干出来,主干分支通常叫做master,在主分支上可以开很多分支出来,不同的人在不同的分支上做开发,最后合并到主分支,这样 ...
- 主线程用afxBeginThread()创建多个线程安全退出的办法
HANDLE hand[]; CCriticalSection m_crisecoin; CEvent m_event; struct Student { int nNO; int nYear; CW ...
- MBA都需要学习哪些课程
MBA课程内容详解: 1.核心课程: 管理经济学.营销管理.战略管理.组织行为学.会计学.公司财务管理.人力资源管理与开发.管理与沟通.经济法.国际贸易 2.学位课程: 商务英语(一.二).管理伦理学 ...
- Rust String(官方文档翻译)
学习Rust,官方文档全英文,查询不太方便,索性直接翻译完,方便查询使用.有需要自由转载,本人英文水平有限,文档是在谷歌翻译的基础上加个人理解完成,不敢保证正确.文档翻译错误的地方欢迎指出: 原文地址 ...