[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 ...
随机推荐
- Aptana studio 3前端开发编辑器推荐
直接进入主题,先上图 这就是我Apatana studio 3的默认界面,推荐此工具的原因主要有以下几点: 1.可以集成Emmet,快速编写HTML+CSS,做到效率倍增. 2.Jquery 自动完成 ...
- 2015.8.1 bootstrap学习(个人每日学习的随笔,比较凌乱
写在前面: 记录自己的学习中遇到的问题和解决办法.因为是每日晚上总结,可能只是随便一笔带过方便自己记忆.如有写的错误或者凌乱之处,请勿介意 1.<html lang="zh-hans& ...
- D_S 线性表的顺序表示和实现
线性表的顺序表示又称为顺序存储结构或顺序映像 顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构,简言之,逻辑上相邻,物理上也相邻 顺序存储方法:用一组地址连续的存储单元依次存 ...
- TFS 2015 Update 2功能探索
微软刚刚发布了TFS 2015 update 2的测试包,https://blogs.msdn.microsoft.com/bharry/2016/02/10/team-foundation-serv ...
- C自学笔记-递归与迭代的使用方法笔记与两者的使用场合
递归和迭代在刚开始学C语言的时候就学过,但是不知道怎么使用.今天遇到一个题目分析过后 我瞬间想起来之前学过递归的方法,做完题后顺便翻了翻书整理了这个笔记.题目大概是这样的. 题目:猴子吃桃问题:猴子第 ...
- openfire+asmack搭建的安卓即时通讯(六) 15.4.16
啊啊啊啊啊啊啊啊,这东西越做越觉得是个深坑啊! 1.SharedPreferences.Editor的密码保存和自动登录: 首先还是从主界面开始,因为要提升一下用户体验自然要加入保存密码和自动登录的功 ...
- ZBrush中的纹理-水手该怎样进行绘制
如下是一张使用ZBrush3D图形绘制软件绘制的栩栩如生的水手图片,那么有人要问了,如何创建水手渲染的皮肤纹理呢?接下来,小编将教大家学习如何创建皮肤颜色,顺便说一下,这里所选取的颜色仅仅是在ZBru ...
- POJ 1269 Intersecting Lines --计算几何
题意: 二维平面,给两条线段,判断形成的直线是否重合,或是相交于一点,或是不相交. 解法: 简单几何. 重合: 叉积为0,且一条线段的一个端点到另一条直线的距离为0 不相交: 不满足重合的情况下叉积为 ...
- 2014 UESTC 暑前集训队内赛(3) 部分解题报告
B.Battle for Silver 定理:完全图Kn是平面图当且仅当顶点数n<=4. 枚举所有完全图K1,K2,K3,K4,找出最大总权重. 代码: #include <iostrea ...
- Android配置----小米手机通过wifi连接ADB调试Android应用
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...