首页 > 其他分享 >CF1342F Make It Ascending

CF1342F Make It Ascending

时间:2023-08-22 21:47:58浏览次数:42  
标签:le Make 状压 Ascending CF1342F 集合

CF1342F Make It Ascending

题意

给予一个包含\(n\)个元素的数组\(a\),你可以进行以下操作:

  • 选择两个不同的元素\(a_i,a_j\)(\(1 \le i,j \le n\),\(i \ne j\))
  • 将\(a_j\)的值加上\(a_i\),并移除\(a\)中的第\(i\)个元素。

求使\(a\)数组严格递增(对于\(1 \le i < n\),有\(a_i<a_{i+1}\))所需的最少操作数(可以为\(0\))。

题解

首先对于这道题我们容易想到状压。
但是直接状压没有太好的方法,考虑到最后的样子一定是原数列的若干个集合并在不同的数字上。
这些数字的值和位置都

容易想到一个朴素的 \(dp\)。
\(f_{S,p,v}\) 表示使用了 \(S\) 这个点集,目前的代表原位置在 \(p\),值为 \(v\) 的最小合并次数。
但是这样很难,因为 \(v\) 这一维的大小是值域,这东西是很大的,不太行。

注意到一个事情,对于 \(f_{S,p,v}\) 和 \(f_{S,p,v'}\) 来说,若 \(v<v'\) 且 \(f_{S,p,v} \leq f_{S,p,v'}\) 则后者显然无用。
这个东西就有一个类似于单调性的东西,对于所有 \(f_{S,p,v}\) 若前两维相同,且值相同,则只有最小 \(v\) 状态有用

注意到答案可能不会很大,同时有前面的性质,所以考虑交换维护的值域和答案

\(f_{S,i,p}\) 表示 使用了的点集为 \(S\) ,目前在处理的是第 \(i\) 个集合,代表元位置为 \(p\),最后一个集合的值的最小值。
转移的话就枚举一个集合看一下能否单调即可,最后的状态中显然就是找 \(i\) 最大且可以到达的状态。
输出路径记录一下就好了。

标签:le,Make,状压,Ascending,CF1342F,集合
From: https://www.cnblogs.com/snow-panther/p/17649747.html

相关文章

  • cmake入门教程——以LLVM、Pytorch为例
    时代变了,已经基本无人写makefile,现在都是使用cmake进行项目构建的。cmake相对来说还是比较简单的,鄙人熟练修改LLVM/Pytorch,我们可以剖析下我比较熟悉项目的cmake配置。一、cmake介绍二、LLVMcmake配置三、Pytorchcmake配置四、总结......
  • MinGW-w64、cmake 安装
    介绍MSVC:即MicrosoftVisualC++Compiler,即微软自己的编译器我们下载Windows下的OpenCV时,会带两个文件夹VC14,VC15(分别与VisualStudio的版本有对应关系),这两个文件夹下的库可以直接运行不需要编译将VS作为Qt的开发环境也是使用这个编译器的缘故MinGW:我们都知道GNU在Linux下面......
  • 8.makefile-gdb-文件IO
    8.makefile-gdb-文件IO学习目标:熟练使用规则编写简单的makefile文件熟练使用makefile中的变量熟练使用makefile中的函数熟练掌握gdb相关调试命令的使用了解概念:pcb和文件描述符,虚拟地址空间熟练掌握Linux系统IO函数的使用1.makefilemakefile文件中定义了一系列的规则......
  • [转]By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
    在编译安装的时候出现如下问题,是Eigen3的Cmake依赖问题,已经安装eigen3,但在项目的find_package(Eigen3QUERIED)中,无法找到FindEigen3.Cmake. CMakeErroratloam_velodyne/CMakeLists.txt:13(find_package):Bynotproviding"FindEigen3.cmake"inCMAKE_MODULE_......
  • gcc make cmake ninja的区别
    理清C++编译过程用到的工具概念ref:GCC、CMake、CMakelist、Make、Makefile、Ninja啥关系?一图讲透!-知乎(zhihu.com)早先学C++的时候,因为只需要点击IDE的运行按钮,程序就可以跑起来,写过最复杂的只不过是几个文件的学生管理系统。现在要重新拾起C++,看的项目和之前的不可同日而......
  • Wiindows下更改CMake编译器为MinGW
    个人环境MinGW:使用QT6install的mingw1120_64.CMake:使用QT6install的CMake3.24.2.第一次编译时,默认生成VS的工程文件,为了修改编译器为MinGW,在编译时,键入:cmake-G"MinGWMakefiles"-DCMAKE_CXX_FLAGES=-std=c++11同时也指定了编译器支持的编译标准为c++11注......
  • cmake随笔
    cmakecmake命令使用##配置projectcmake[<options>]<path-to-source>`常用选项:-S<path-to-source>:指定源文件根目录-B<path-to-build>:指定构建文件目录-G<generator-name>:指定生成器。具体支持哪些生成器可用-DCMAKE_BUILD_TYPE=Debug:配置debug版-DCMAKE_BUI......
  • CF1188D Make Equal 题解
    题意给定\(n\)个数\(a_1,a_2,\cdots,a_n\),每次操作可以给其中的一个数加上\(2\)的非负整数次幂。求最小的操作次数,使得这\(n\)个数相等。题解首先考虑如何计算操作次数,设\(maxa=\max\limits_{i=1}^{n}a_i\),如果我们把这\(n\)个数操作成了数\(x\)(\(x\gemax......
  • CF1188D Make Equal
    题目大意给出\(n\)个数字\(a_1,a_2,\dots,a_n\),每次操作可以给其中一个数加上\(2\)的非负整数次幂。求最少的操作次数,使得这\(n\)个数相等。思路记\(b_i=\max\limits_{1\leqk\leqn}{a_k}-a_i\),这道题的目的是求一个值\(x\)使得\[\sum_{i=1}^n\operatorname......
  • CMakeLists语法详解
     https://www.jianshu.com/p/eb25baf5ca19set(Root"${CMAKE_CURRENT_SOURCE_DIR}")set(Base64${Root}/lib/libb64/src)include_directories(${OpenCV_INCLUDE_DIRS})include_directories(${Root})include_directories(${Root}/lib/libb64/include) include_dir......