每日一题 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;
}

  

最新文章

  1. Struts2 讲解笔记
  2. TensorFlow 在android上的Demo(1)
  3. linux arch目录下处理器体系架构介绍
  4. javascript事件有哪些?javascript的监听事件
  5. springmvc学习笔记--Interceptor机制和实践
  6. html注意
  7. (笔记)VC6插件安装--Unable to register this add-in because its DllRegisterServer returns an error
  8. AppDelegate中的方法解析
  9. OpenSSH ‘mm_newkeys_from_blob’函数权限许可和访问控制漏洞
  10. HTML5实现的视频播放器01
  11. qt5学习目录
  12. 数仓1.1 分层| ODS&amp; DWD层
  13. python 之 初识面向对象
  14. Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程
  15. 转换区别json
  16. 动态改变Listview的item背景颜色和item中字体的颜色
  17. VBA: 怎样批量数据从Excel派出到Visio
  18. 使用JPush(极光推送)实现远程通知
  19. java基础----&gt;java中变参函数的使用
  20. Lightoj 1003 - Drunk(拓扑排序判断是否有环 Map离散化)

热门文章

  1. dotnet Core 图片验证码
  2. PHP Math常量
  3. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
  4. win10环境下,让所有程序都以管理员身份运行的办法
  5. php中的特殊标签
  6. sql server 2012 分页/dapper/C#拼sql/免储存过程/简易
  7. linux IPC简单学习
  8. 1.JUC锁的一些概念
  9. win10 下的 CUDA10.0 +CUDNN + tensorflow + opencv 环境部署
  10. MVC-Cache-1.输出缓存(Cache:[1].输出缓存2.应用程序缓存)