最长公共子序列问题

构造最长公共子序列为什么要这样构造序列

cpp 复制代码
 for(int i=1;i<=n;++i)
    {
        int k;
        cin>>k;
        b[k]=i;
    }
    for(int i=1;i<=n;++i)
    {
   	    int k;
    	cin>>k;
    	a[i]=b[k];
    }

并且为什么要求上升序列,是有什么数学知识包含在其中吗?

为什么在求最长公共子序列时,f[mid]大于等于或大于a[i]都可以,而在最长单调上升子序列中只能大于等于,不能大于

cpp 复制代码
   for(int i=1;i<=n;++i)
    {
	    if(f[ans]<a[i]) f[++ans]=a[i];
	    else
	    {
 	        int l=1,r=ans;
 	        while(l<r)
  	        { 
        	    int mid=(l+r)>>1;
        	    if(f[mid]>a[i]) r=mid;
                else l=mid+1;   
            }
            f[l]=a[i];
        }
}
相关推荐
浮游本尊几秒前
Java学习第35天 - 分布式系统深入与大数据处理
java
癫狂的兔子1 分钟前
【Python】【Flask】抽奖功能
开发语言·python·flask
你怎么知道我是队长2 分钟前
C语言---无名位域
c语言·开发语言
2301_7806698611 分钟前
Set集合、HashSet集合的底层原理
java
带土118 分钟前
6. C++智能指针(1)
开发语言·c++
你曾经是少年22 分钟前
Java 关键字
java
海南java第二人25 分钟前
SpringBoot启动流程深度解析:从入口到容器就绪的完整机制
java·开发语言
问今域中27 分钟前
Spring Boot 请求参数绑定注解
java·spring boot·后端
星火开发设计29 分钟前
C++ queue 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识·队列
rgeshfgreh31 分钟前
Java+GeoTools+PostGIS高效求解对跖点
java