HDU1423 LCIS
1,先离散化,然后DP:
注意这个解法中,dp[i][j][k]代表a序列中前i个和b序列中前j个数结尾为k或小于k时的最大。
但是由于i是单增(一次1->n),而j反复变化(多次1->m),因此i可以滚动,而j不可以。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
int x[],y[],xx[],yy[],dp[][][];
int tmp[],cnt,m,n,Max;
map<int,int>q;
void _lisan()
{
int i,j;
q.clear();
cnt=;
scanf("%d",&n);
for(i=;i<=n;i++) {
scanf("%d",&x[i]);
tmp[i]=x[i];
}
scanf("%d",&m);
for(i=;i<=m;i++) {
scanf("%d",&y[i]);
tmp[n+i]=y[i];
}
sort(tmp+,tmp+m+n+);
q[tmp[]]=++cnt;
for(i=;i<=m+n;i++)
if(tmp[i]!=tmp[i-]) q[tmp[i]]=++cnt;
for(i=;i<=n;i++)xx[i]=q[x[i]];
for(i=;i<=m;i++)yy[i]=q[y[i]];
memset(dp,,sizeof(dp));
Max=;
}
int main()
{
int T,i,j,k;
cin>>T;
while(T--){
_lisan();
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
if(xx[i]==yy[j]){
dp[i%][j][xx[i]]=max(dp[i%][j][xx[i]],dp[(i+)%][j-][xx[i]-]+);
}
for(k=;k<=cnt;k++)
{
dp[i%][j][k]=max(dp[i%][j][k],dp[(i+)%][j][k]);
dp[i%][j][k]=max(dp[i%][j][k],dp[i%][j][k-]);
dp[i%][j][k]=max(dp[i%][j][k],dp[i%][j-][k]);
}
}
printf("%d\n",dp[n%][m][cnt]);
if(T)printf("\n");
}
return ;
}
2, LCIS套模板:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#define maxn 1000+5
using namespace std;
int a[maxn],b[maxn];
int f[maxn];
int n,m;
int LCIS()
{
int ans=;
for(int i=;i<=n;i++){
int tmp=;
for(int j=;j<=m;j++){
if(a[i]==b[j]) f[j]=tmp+;
else if(a[i]>b[j]){
if(tmp<f[j])
tmp=f[j];
}
}
}
for(int i=;i<=m;i++)
ans=max(ans,f[i]);
return ans;
}
int main()
{
int T;
cin>>T;
while(T--){
memset(f,,sizeof(f)) ;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=;i<=m;i++)
scanf("%d",&b[i]);
printf("%d\n",LCIS());
if(T)printf("\n");
}
}
HDU1423 LCIS的更多相关文章
- HDU4512完美队形I && HDU1423 Greatest Common Increasing Subsequence (LCIS)
填坑的时候又到啦,校赛因为不会LCIS所以吃了大亏,这里要补起来.LCIS就是在两个串里找最长上升子序列,相关的博客有很多,这里自己就不写那么多了. http://www.cnblogs.com/ja ...
- HDU-1423 最长公共上升子序列(LCIS)
问题描述: 给定两个字符串x, y, 求它们公共子序列s, 满足si < sj ( 0 <= i < j < |s|).要求S的长度是所有条件序列中长度最长的. 做过最长公共子 ...
- HDU1423 最长公共上升子序列LCIS
Problem Description This is a problem from ZOJ 2432.To make it easyer,you just need output the lengt ...
- LCS(记录路径)+LIS+LCIS
https://blog.csdn.net/someone_and_anyone/article/details/81044153 当串1 和 串2 的位置i和位置j匹配成功时, dp[i][j]=d ...
- BestCoder Round #87 1003 LCIS[序列DP]
LCIS Accepts: 109 Submissions: 775 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65 ...
- LCIS(最长公共上升子序列)Vijos1264神秘的咒语
描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...
- 最长公共上升子序列(LCIS)
最长公共上升子序列慕名而知是两个字符串a,b的最长公共递增序列,不一定非得是连续的.刚开始看到的时候想的是先用求最长公共子序列,然后再从其中找到最长递增子序列,可是仔细想一想觉得这样有点不妥,然后从网 ...
- hdu-5904 LCIS(水题)
题目链接: LCIS Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- LCIS HDOJ 4512 吉哥系列故事——完美队形I
题目传送门 题意:中文题面 分析:LCIS应用:设置b[]为a[]的反转,然后LCIS,若相等的是自己本身,则+1, 否则+2 代码: #include <cstdio> #include ...
随机推荐
- 第4阶段——制作根文件系统之分析init_post()如何启动第1个程序(1)
本章学习如何启动第一个应用程序 1.在前面的分析中我们了解到,在init进程中内核挂接到根文件系统之后,会开始启动第一个应用程序: kernel_init函数代码如下: static int __in ...
- Java中的异常和处理详解
简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. ...
- Linaro系统获取root权限方法
在Zedboard上根据教程安装Linaro Ubuntu后出现一只无法获取Root权限,导致无法挂载U盘等问题. 具体体现在sudo -s命令之后,出现如sudo:must be setuid ro ...
- datable 翻页事件处理
JQuery datatable插件,点下一页在点击事件无效问题 (2013-10-16 16:01:54) 转载▼ 分类: C# 在MVC的项目中,我利用jquery datatable 来实现 ...
- 转:【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313 happen-before规则介绍 Java语言中有一个"先行发生 ...
- 团队作业4——第一次项目冲刺(Alpha版本) 4.23
团队作业4--第一次项目冲刺(Alpha版本) Day two: 会议照片 每日站立会议: 项目进展 今天是项目的Alpha敏捷冲刺的第二天,先大概整理下昨天已完成的任务以及今天计划完成的任务.今天主 ...
- 201521123073《Java程序设计》第4周学习总结
一. 本周学习总结 二. 书面作业 1.注释的应用 2.面向对象设计(大作业1,非常重要) 2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事.(不得少于50字,参考QQ群中PPT ...
- 201521123111《Java程序设计》第3周学习总结
1. 本章学习总结 你对于本章知识的学习总结 2. 书面作业 1. 代码阅读 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private ...
- 201521123110《Java程序设计》第1周学习总结
1.第一周学习总结 `本周开始了对java的初次学习接触,Java是一门新的编程语言不同于C,由于有了c的基础,对于Java的理解和学习也相对从前学C更容易些. 也学习了Java的诞生发展以及运用包括 ...
- YYHS-鏖战字符串
题目描述 Abwad在nbc即将完成她的程序的时候,急中生智拔掉了她电脑的电源线,争取到了宝贵的时间.作为著名论文<论Ctrl-C与Ctrl-V在信息学竞赛中的应用>的作者,他巧妙地使用了 ...