CH5101 LCIS(最长公共上升子序列) 题解
2024-08-27 06:53:41
每日一题 day16 打卡
Analysis
设F[i,j]表示A[1..i]与B[1..j]并且以B[j]结尾的两段最长公共上升子序列,那么我们可以发现这样的转移
(1)A[i]==B[j]时
F[i][j]=max(F[i-1][k])+1,其中k满足1<=k<=j并且B[j]<A[i].
(2)如果不相等:
F[i][j]=F[i-1][j]
这样我们三重循环就可以搞定。但是这里是可以优化的。
我们考虑这样的一个事实:我们知道这样的一个事实,再第二层循环的时候,我们其实在枚举j。我们把满足条件的k叫做决策集合:S(i,j)。在j增加的时候,我们需要判断j是否可以被加入这个集合。所以我们需要检查:B[j]和A[i]的大小关系。如果满足b[j]<a[i],那么我们就可以把他加入新的集合,这个时候我们只需要记录上一次的最大值,没必要在循环找一遍。这样就可以优化一层循环。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define maxn 3000+10
using namespace std;
inline int read()
{
int x=0;
bool f=1;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=0;
for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+c-'0';
if(f) return x;
return 0-x;
}
inline void write(int x)
{
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
int n,ans;
int a[maxn],b[maxn],dp[maxn][maxn];
signed main()
{
n=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=n;i++) b[i]=read();
for(int i=1;i<=n;i++) dp[i][0]=dp[0][i]=0;
for(int i=1;i<=n;i++)
{
int val=0;
for(int j=1;j<=n;j++)
{
if(a[i]==b[j]) dp[i][j]=val+1;
else dp[i][j]=dp[i-1][j];
if(b[j]<a[i]) val=max(val,dp[i-1][j]);
}
}
for(int i=1;i<=n;i++) ans=max(ans,dp[n][i]);
write(ans);
return 0;
}
最新文章
- Struts2 讲解笔记
- TensorFlow 在android上的Demo(1)
- linux arch目录下处理器体系架构介绍
- javascript事件有哪些?javascript的监听事件
- springmvc学习笔记--Interceptor机制和实践
- html注意
- (笔记)VC6插件安装--Unable to register this add-in because its DllRegisterServer returns an error
- AppDelegate中的方法解析
- OpenSSH ‘mm_newkeys_from_blob’函数权限许可和访问控制漏洞
- HTML5实现的视频播放器01
- qt5学习目录
- 数仓1.1 分层| ODS&; DWD层
- python 之 初识面向对象
- Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程
- 转换区别json
- 动态改变Listview的item背景颜色和item中字体的颜色
- VBA: 怎样批量数据从Excel派出到Visio
- 使用JPush(极光推送)实现远程通知
- java基础---->;java中变参函数的使用
- Lightoj 1003 - Drunk(拓扑排序判断是否有环 Map离散化)
热门文章
- dotnet Core 图片验证码
- PHP Math常量
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
- win10环境下,让所有程序都以管理员身份运行的办法
- php中的特殊标签
- sql server 2012 分页/dapper/C#拼sql/免储存过程/简易
- linux IPC简单学习
- 1.JUC锁的一些概念
- win10 下的 CUDA10.0 +CUDNN + tensorflow + opencv 环境部署
- MVC-Cache-1.输出缓存(Cache:[1].输出缓存2.应用程序缓存)