首页 > 其他分享 >Merge Not Sort

Merge Not Sort

时间:2024-07-09 19:08:29浏览次数:15  
标签:Sort 一个 元素 Merge 序列 2n 方法 DP

先来讲一下我的做法

在考虑特殊元素无果之后,我们尝试模拟法,即模拟什么时候从放一个序列的元素变成放另一个序列的元素

由于对称性,我们不妨假设最开始放的\(A\)

那么就有\(A[1]<B[1]\),假设指针一直到\(i\),则\(A[i]>B[1]\),然后\(A[1\)~\(i-1]\)都被放入了连续的一段,接下来再放\(B\)

由于对称性,可以知道这是一个子问题,于是可以想到DP,设\(f[i][j]\)表示对于\(i\)~\(2n\)这些字符,是否存在一种放法使得\(A\)的长度为\(j\)

有\(f[i][j]|=f[k][2n-i+1-j]\),要求\(a[k]>max_{i≤l<k}(c[l])\)(根据对称性可以得出)

然而现在有个问题就是这个DP不好记录中途的转移,这里介绍一种新方法,由于是可行性DP,中途只要找到一个\(f[k][2n-i+1-j]\)为\(1\)就可以转移,于是可以直接DFS,具体见代码

然后讲一下官方题解的方法,可以看这篇博客

解释一下这句话:这样做显然是正确的。因为如果一个块的任意一个非块头元素放到另一个序列都会被先放到\(c\)

首先\(A,B\)无论是什么样子,其中的元素的相对位置是不会变化的,所以假设一个块是\(c[l\) ~ \(r]\),不妨设\(A\)中有\(c[l\) ~ \(k]\),\(B\)中有\(c[k+1\) ~ \(r]\),那么两个指针肯定会在某一时刻,其中一个指向\(A[l]\),另一个指向\(B[k+1]\)(假设其他的块都是正常放的),此时\(c[k+1]\)就会先于\(c[l]\)放,这显然是不行的,所以是不可能的

由以上两种方法,我觉得还是自己的方法好理解一些,不知道这个方法怎么想到的

标签:Sort,一个,元素,Merge,序列,2n,方法,DP
From: https://www.cnblogs.com/dingxingdi/p/18292588

相关文章

  • Linux系统运维命令:查看http的并发请求数及其TCP连接状态(使用netstat结合awk和sort,组合
    一、需求二、解决方法(一)解决思路(二)命令三、实例演示和命令解释(一)实例演示(二)命令解释四、扩展一、需求用户访问一个视频监控平台的web服务特别频繁,据客户说,有大概2000个用户,要随机访问这个视频监控平台,这样对带宽的要求非常大。因此,他们需要查看到底有多少个http的并......
  • Python排序,你用对了吗?一文教你sorted和sort的正确姿势!
    目录1、sorted基础用法......
  • Apache/InLong InLong Manager 支持配置 Flink 任务并发度/Adjust sort resources acc
    audit已经实现了对于InLong系统的Agent、DataProxy、Sort模块的入流量、出流量进行实时审计对账。对账的粒度有分钟、小时、天三种粒度。audit的数据缓存在org.apache.inlong.audit.cache的各个类中,有DayCacheHalfHourCache等等请求audit数据的api在org.apache.inlong.audit.......
  • np.argsort
    函数解释np.argsort是NumPy库中的一个函数,用于对数组进行排序并返回排序后的索引。它不会直接对数组进行排序,而是返回一个数组,这个数组中的元素是原数组中元素按升序排序后的索引。numpy.argsort(a,axis=-1,kind=None,order=None)参数如下:a:要排序的数组axis:要排序的轴,默......
  • The following untracked working tree files would be overwritten by merge/ git st
    背景给同学解决问题时,发现无法拉取远程的分支。解决他在C:\Users\用户名\路径下,建立了一个git仓库,然后在桌面上创建了一个文件夹,文件夹内部又新建了一个文件夹,导致gitstatus显示大量父级目录(多级父级)的文件。删除父级中的.git文件即可拉取前没有initgitpull用惯了......
  • WPF ResourceDictionary ResourceDictionary.MergedDictionaries
    1.Addresourcedictionary,Brushes.xaml<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><LinearGradientBrush......
  • [题解]AT_abc237_g [ABC237G] Range Sort Query
    思路将小于等于\(x\)的元素赋为\(1\),其余的赋为\(0\)。那么一个区间内小于等于\(x\)的数量就是区间中\(1\)的数量。那么,将区间升序排列就是将\(1\)先堆在前面,将\(0\)堆到后面;降序排列同理。考虑动态维护\(x\)的位置,记其位置为\(t\)。如果\(l\leqt\leqr\),则......
  • 83. Remove Duplicates from Sorted L
    Giventheheadofasortedlinkedlist,deleteallduplicatessuchthateachelementappearsonlyonce.Returnthelinkedlistsortedaswell.Example1:Input:head=[1,1,2]Output:[1,2]Example2:Input:head=[1,1,2,3,3]Output:[1,2,3]......
  • C#开发-集合使用和技巧(八)集合中的排序Sort、OrderBy、OrderByDescending
    C#开发-集合使用和技巧(八)集合中的排序Sort、OrderBy、OrderByDescendingList<T>.Sort()方法签名使用场景示例升序实现效果降序实现效果IEnumerable<T>.OrderBy()方法签名使用场景示例实现效果Enumerable<T>.OrderByDescending()使用场景示例实现效果总结在C#中,L......
  • Python 3 list sort All In One
    Python3listsortAllInOnePythonsortfunctionListsortlist.sort(key=None,reverse=False)sort()函数用于对原列表进行排序,如果指定参数,则使用指定的比较函数进行比较。key:主要是用来指定进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,......