首页 > 其他分享 >CF1879C Make it Alternating

CF1879C Make it Alternating

时间:2023-10-31 11:44:58浏览次数:38  
标签:Alternating 方案 CF1879C 结尾 leftarrow Make 字符串 步数 不删

传送门

设\(f_{i,0}\)表示将\([1,i]\)位变成以\(0\)结尾的字符串的最小步数。
\(f_{i,1}\)表示将\([1,i]\)位变成以\(1\)结尾的字符串的最小步数。
\(f_{i,2}\)表示将\([1,i]\)位变成空字符串的最小步数。

转移的时候分类讨论一下第\(i\)位的选取与否,注意要求方案数,所以要注意分讨的不重不漏。

比如:\(s_i=0\)的情况。

以\(0\)结尾,讨论\(s_i\)删与不删,\(f_{i,0}\leftarrow min\{f_{i-1,0}+1,f_{i-1,1},f_{i-1,2}\}\)。

以\(1\)结尾,讨论\(s_i\)删与不删,因为\(s_i=0\),所以一定要删,删了之后就是\(i-1\)的情况,\(f_{i,1}\leftarrow f_{i-1,1}\)。

空串,全部都要删掉,第\(i\)个一定要删,\(f_{i,2}\leftarrow f_{i-1,2}+1\)。

\(s_i=1\)类似。

初始时,\(f_{0,0}=f_{0,1}=+\infty,f_{0,2}=0\)。

不难发现,上述的每次分类都是不重不漏的,\(g\)数组表示方案,一样维护。

\(g_{0,0}=g_{0,1}=0,g_{0,2}=1\)。

然后发现\(g\)表示的方案是有序的,因为动态规划的时候是从前往后,删的数肯定也是从前往后的。

所以乘上\(ans!\)即可。

需要注意,每个CASEmemset整个数组,会TLE,所以清空\(n\)的长度就行了(循环,memset都行)。


题解大部分都是组合数学的做法。

显然,连续的一段\(1\)或者\(0\),必须要变成1个\(0\)或者\(1\)。

比如有连续\(k\)个1,就要删掉\(k-1\)个,但是具体怎么删呢?就是从\(k\)个里面选\(k-1\)个数。

然后发现选择的方案是有序的,但是如果你直接算\(k!\),方案就会把这些成段的删除的数绑定在一起,就错误了。

所以直接算组合数,最后把选出来的数乘上\(ans!\)即可。

标签:Alternating,方案,CF1879C,结尾,leftarrow,Make,字符串,步数,不删
From: https://www.cnblogs.com/zhangchenxin/p/17799897.html

相关文章

  • 关于make/makefile/cmake的区别
    1.gcc可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。我们的程序只有一个源文件时,直接就可以用gcc命令编译它。如果我们的程序包含很多个源文件时,就发现很容易混乱而且工作量大,所以出现了下面make工具。2.makemake工具可以看成是......
  • cmake打印堆栈
    设置参数add_compile_options(-g)add_compile_options(-O0)add_compile_options(-no-pie)set(CMAKE_C_FLAGS"${CMAKE_C_FLAGS}-O0-g0")set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}-O0-g0")set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}-std=c++11......
  • makefile学习之编译器报错问题
    1、当使用makefile自动推导的功能时编译器报错ccJS7JEh.s:Assemblermessages:ccJS7JEh.s:5:Error:invalidinstructionsuffixfor`push'ccJS7JEh.s:7:Error:invalidinstructionsuffixfor`push'\ccJS7JEh.s:14:Error:operandtypemismatchfor`call'ccJ......
  • CS61A hw03 make_anoymous_factorial()
    CS61Ahw03make_anoymous_factorial()自问自答&写在前面​ 写这些是因为这道练习没写出来,刚开始看到官方的solution也没看明白,通过从答案反推之后,有了一些对lambda表达式的一些理解,在此分享,观看之前还是希望经过自己思考之后再看,毕竟聪明的你都来学cs61a了,应该已经学会独立思考......
  • 原来Linux makefile可以如此简单
    作者:朱金灿  原来以为Linuxmakefile挺复杂的,直到从网上找到一个编译模板,发现Linuxmakefile是如此简单,而且你还可以根据该模板实现C程序和C++程序的混合编译。下面是Linuxmakefile模板的脚本代码:#指定c编译器CC=gcc#指定C++编译器C++=g++#指定链接器LINK=g++......
  • Makefile 入门
    一、Makefile简介什么是Makefile?很多做windows的程序员可能都没有接触过,因为windows的很多开发环境中都已经帮你做了这些事情,一键编译构建即可;但是要对工程的编译、链接、构建有一个专业的认识,或者要在linux上编程的话,就需要了解Makefile了。Makefile,人称“工程管理器”,它的作用......
  • cmake学习
    基础的一个cmake文件:cmake_minimum_required(VERSION3.25)project(app)set(CMAKE_CXX_STANDARD20)set(EXECUTABLE_OUTPUT_PATHbin/)set(SRC_LISTsrc/main.cppsrc/util.cpp)add_executable(app${SRC_LIST})target_include_directories(appPUBLICinclude/)......
  • makedown教程
    标题我展示的是一级标题我展示的是二级标题一级标题二级标题三级标题四级标题五级标题六级标题段落这是段落直接在末尾加上两个空格这是段落使用空格来换行直接换行效果字体斜体文字斜体文本粗体文本粗体文本粗斜体文本粗斜体文本分隔符删除线RUNOOB.......
  • 跟我一起写makefile(转载)
    最近想学习makefile,所以想当然就去找鼎鼎大名的《跟我一起写makefile》。不过后来因为我看着博客有点乱,而且我希望我没网的时候也能进行浏览。所以打算找离线版的。尽量pdf和离线html都有。github找到一个:https://github.com/seisman/how-to-write-makefile。跟着提示进行编译......
  • Shell-Makefile使用变量
    可以现在build.sh中source需要的config.sh配置文件,并export其中包含的变量。此时,变量在当前shell终端中生效。Makefile中只用变量应为${VAL}https://blog.csdn.net/mouday/article/details/128966176https://blog.csdn.net/QCZTZSWT357/article/details/102577134......