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 ...
随机推荐
- Project 6:上楼梯问题
问题简述:梯有N阶,上楼可以一步上一阶,也可以一步上二阶.编写一个程序,计算共有多少中不同的走法. 样例输入: 5 样例输出: 8 #include <stdio.h> int count ...
- Color.js增强你对颜色的控制
往逝之因 不要低头,皇冠会掉... 可你又没有皇冠 Color.js 增强你对颜色的控制 阅读目录 轻松管理颜色--color.js库 使用color.js Accessor Methods 你该知 ...
- Python虚拟环境virtualenv
用意 virtualenv可以搭建虚拟且独立的python运行环境, 使得单个项目的运行环境与其它项目独立起来. 安装 virtualenv本质上是个python包, 使用pip安装 pip inst ...
- ajax中后台string转json
首先导入alibaba的fastJson包 后台: String thirdPage1=prop.getProperty("thirdPage1"); String thirdPa ...
- 201521123045 《Java程序设计》第2周学习总结
---恢复内容开始--- #1. 本周学习总结 上课讲解了上次的实验题目,对其中题目的一些问题得到了解决.学会了java数组的使用,对如何使用码云上传代码有了更清晰的理解.pta还是有一些问题没有解决 ...
- 201521123010 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 ①finally 题目4-2 1.1 截图你的提交结果(出现 ...
- FS BPM 业余研发(用户详细操作手册--单人串行/并行)之 深圳分公司技术部请假审批流程
1.FS BPM 简介 BPM软件中BPM是英文字母缩写,大致有二个意思.第一.Business Process Management,即业务流程管理,是一套达成企业各种业 务环节整合的全面管理模式. ...
- 新旧apache HttpClient 获取httpClient方法
在apache httpclient 4.3版本中对很多旧的类进行了deprecated标注,通常比较常用的就是下面两个类了. DefaultHttpClient -> CloseableHtt ...
- JAVA多线程---高并发程序设计
先行发生原则 程序顺序原则:一个线程内保证语义的串行性 volatile:volatile变量的写,先发生于读,这保证了volatile变量的可见性 锁规则:解锁必然发生在随后的加锁前 传递性:A优先 ...
- 深入理解计算机系统chapter1
---恢复内容开始--- 预处理器+编译器+汇编器+链接器=编译系统 运行hello程序 操作系统: 无论是在单核还是多核系统中,一个CPU看上去都在并发的执行多个进程,这是通过处理器在进程间切换来实 ...