[vijos1264]神秘的咒语(LCIS)
描述
身为拜月教的高级间谍,你的任务总是逼迫你出生入死。比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底。
据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语。为了习得这些法术,要付出艰辛的努力,但是回报同样十分丰厚。
拜月希望你告诉他咒语的长度为多少。(你:“请问您想知道咒语的具体内容吗?”拜月:“想,但是vijos不支持special judge。”-_-原来大人物也有大人物的悲哀。。。)
于是你偷偷躲在一边,想乘机看看咒语究竟是什么。突然,天空(??试炼窟底看的到天空??)出现了两条非常长的数字串,你抓狂了。究竟哪个才是真正的咒语呢?你突然想到,这两个都不是咒语(不妨称之为伪咒语),而真正的咒语却与他们有着密切的联系。于是你打开拜月亲手给你写的纸条:"The Real Incantation is Their Common Increasing Subsequence of Maximal Possible Length"
"该死的拜月,居然还会E文!"你咒骂着,但为了一家老小的生命,又不得不卖命地算着咒语的长度。
格式
输入格式
第一行为1个数N,代表有N组测试数据。
对于每组测试数据,描述了两条数字串,首先一个数字为一条伪咒语的长度M,接下来M个数描述了伪咒语的内容。
输出格式
共N行,每行一个数字,描叙了对应咒语的长度。
样例1
样例输入1[复制]
1
5 1 4 2 5 -12
4 -12 1 2 4
样例输出1[复制]
2
限制
1s
提示
对于100%的数据,有1<=N<=5,1<=M<=500,Ai,Bi在长整型范围内。
来源
经典问题
分析:(转自JZP大神犇空间,真心orz……)
题目的意思就是求两个序列的最长公共上升子序列。
显然这题应该是动态规划。结合LCS和LIS的方法,可以得到一种方法:
用f[i,j]表示以A序列中的第i个数为结尾,并且B序列中的第j个数与其对应,则
f[i,j] = max{ f[i',j'] | (i'<i) and (j'<j) and (a[i']<a[i]) } + 1
状态f[i,j]存在的必要条件是a[i]=b[j]。因此可以发现很多状态是无用的,所以显然这个算法不够高效。
换一种思路:
用f[i,j]表示a序列的前i个为结尾和以b序列的第j个为结尾的最长上升公共序列长度。则:
f[i,j]=max{f[i-1,k]}+1 | (a[i]=b[j]) and (b[k]<b[j])
f[i,j]=f[i-1,j] | (a[i]<>b[j])
程序里面在j循环顺带着就找到了最小的k。对于所有小于a[i]的b[k],必定在a[i]=b[j]时小于b[j],所以满足了约束条件。
最后再把i那维给降调。(为什么没有滚动,因为b[k]<>a[i],所以f[k]必定没有没修改)
for(int i=;i<=m;++i)
{
maxf=;
for(int j=;j<=n;++j)
if(b[j]<a[i]) maxf=max(maxf,f[j]);
else
if(b[j]==a[i]) f[j]=maxf+,ans=max(ans,f[j]);
}
[vijos1264]神秘的咒语(LCIS)的更多相关文章
- LCIS(最长公共上升子序列)Vijos1264神秘的咒语
描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...
- vijos1264:神秘的咒语
描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...
- [题解] cogs 1669 神秘的咒语
http://cogs.pro:8080/cogs/problem/problem.php?pid=1669 "The Real Incantation is Their Common In ...
- VijosP1274:神秘的咒语
描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...
- 「 COGS 1669 」 神秘的咒语
题目大意 这出题人太凉心,居然给我句鸟语.(连我最爱的OI也被鸟语污染了吗) 下面给大家说说这句鸟语啥意思.不要误会,都是度娘的功劳 QAQ 之前不是给出了两个伪咒语吗. 这句鸟语就是说真正的咒语就是 ...
- python学习心得第一章
初始python 1什么是程序 计算机程序是一组执行某种动作的的指令.和那些电路.芯片.显卡.硬盘等不同,它不是计算机本身可以触摸的部分,而是隐藏在背后运行在硬件上面的东西.程序就是一系列告诉没有知觉 ...
- 神秘代理-Proxy
前言: 代理模式作为常见的设计模式之一,在项目开发中不可或缺.本文就尝试着揭开代理的神秘面纱,也欢迎各路人批评指正! 1.如何实现代理: [假设有个关于汽车移动(move)的计时需求]设计:Movea ...
- 深入理解javascript对象系列第三篇——神秘的属性描述符
× 目录 [1]类型 [2]方法 [3]详述[4]状态 前面的话 对于操作系统中的文件,我们可以驾轻就熟将其设置为只读.隐藏.系统文件或普通文件.于对象来说,属性描述符提供类似的功能,用来描述对象的值 ...
- [BZOJ4408][Fjoi 2016]神秘数
[BZOJ4408][Fjoi 2016]神秘数 试题描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1+13 = 1 ...
随机推荐
- 04_最长上升子序列问题(LIS)
来源:刘汝佳<算法竞赛入门经典--训练指南> P60 问题6: 问题描述:给定n个整数a1,a2,...,an,按从左到右的顺序选出尽量多的整数,组成一个上升子序列(子序列可以理解为:删除 ...
- oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题
一个数据表基本上很难满足我们的查询要求,同时,将所有的数据都保存在一个表格中显然也不是一种好的数据库设计,为了避免数据的冗余,删除.更新异常,我们通常需要建立一张外键表,通过表连接,来获取我们自己想要 ...
- 百度地图的简单使用 ——html js
一.简介 百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富.交互性强的地图应用,包含了构建地图基本功能的各种接口,提供了诸如本地 ...
- LeetCode 3 Longest Substring Without Repeating Characters 解题报告
LeetCode 第3题3 Longest Substring Without Repeating Characters 首先我们看题目要求: Given a string, find the len ...
- selenium向富文本框填写内容的几种方式
富文本框如果是iframe,则用下 1.先跳转到irame,dr.switchTo().frame(wtext); 然后用js JavascriptExecutor jsExecutor = (Jav ...
- 【Javascript Demo】移动端访问PC端网页时跳转到对应的移动端网页
不想通过CSS自适应在PC端和移动端分别显示不同的样式,那么只能通过在移动端访问PC端网页时跳转到对应的移动端网页了,那么怎么跳转呢,网上也有很多文章说明,下面是本人测试有效的方式. 1.效果图 PC ...
- HDU 3333 Turing Tree --树状数组+离线处理
题意:统计一段序列[L,R]的和,重复元素只算一次. 解法:容易看出在线做很难处理重复的情况,干脆全部讲查询读进来,然后将查询根据右端点排个序,然后离散化数据以后就可以操作了. 每次读入一个数,如果这 ...
- 使用Unity开发Android的几种调试方法
前言 本文举例几种Android 调试的方法(PS:我是通过unity引擎来开发安卓游戏) Eclipse + adt 查看LOG 1.为Eclipse 装上adt 插件 2.打开Eclipse 的L ...
- Cobbler自动化批量安装linux服务器的操作记录
Cobbler为何物?Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命 ...
- JQuery[一] 中如何选中$(this)下面的子元素
<ul> li><span></span></li> li><span></span></li> < ...