首页 > 其他分享 >P4071 [SDOI2016] 排列计数

P4071 [SDOI2016] 排列计数

时间:2023-09-12 19:55:48浏览次数:55  
标签:排列 位置 times 计数 SDOI2016 binom 递推 P4071 dp

原题

\[\huge{\color{#ff0000}{\text{被XJK搏杀了,我tcl}}} \]

我们先从\(n\)个数里选\(m\)个数钦定这些数满足\(a_i = i\),因此原问题就等于让\(n-m\)个数的排列满足\(a_i \neq i\)的排列方案数

先说一个错误的做法:设\(dp_i\)表示长为\(i\)的排列的方案数。我们每次枚举一个大小为\(j\)的环,可以得到递推式子:

\[dp_i = \sum_{j=2}^{i}{ dp_{i-j} \times (j-1)! \times \binom{i}{j} } \]

其中\((j-1)!\)为组成一个大小为\(j\)的环的方案数,\(\binom{i}{j}\)表示从\(i\)个排列中选\(j\)个,让他们组成环

我们发现这个是不对的,比如2 1 4 3,\(\binom{i}{j}\)会同时计算钦定环为2 1和4 3的情况,这很明显会重复。寄


正解做法:设\(dp_i\)表示长为\(i\)的排列的方案数。每次我们判断\(n\)这个数放在哪个位置:

  1. 放在不是\(n\)所在位置的位置,让后把这个位置删掉(因为他已经被填数了,而且这次填数没有任何环构成)

  2. 放在不是\(n\)所在位置的位置,并且这个位置的下标的数放在\(n\)这个位置(此时构成了一个环)

因此可以得出递推式:\(dp_i = (i-1) \times dp_{i-1} + (i-1) \times dp_{i-2}\)

思路总结:对于与环的个数有关的问题,递推式要考虑删掉环上一个没用的点或删掉一个大小为\(2\)的环的两种情况

\[\huge{\color{#ff0000}{\text{被xjk搏杀了,我tcl}}} \]

标签:排列,位置,times,计数,SDOI2016,binom,递推,P4071,dp
From: https://www.cnblogs.com/fox-konata/p/17697665.html

相关文章

  • 【Python新手参考】带界面的英文单词计数器
    事情经过昨天晚上用电脑写作文,由于不放心Word的计词器,一时又找不到合适的工具,于是索性自己写了一个。那么为什么要带界面呢?原因是我曾经尝试过input(),但是它不能处理文本中的换行,所以只能将tkinter.Text作为输入框。写完之后我发现这个东西似乎还有点参考价值,故post出来。包含......
  • #9 计数什么时候滚粗oi
    BindianSignalizing题面断环为链,令\(l_i\)表示\(i\)左边第一个高于\(i\)的,\(r_i\)表示\(i\)右边第一个高于\(i\)的,\(cnt_i\)表示区间\([l_i,r_i]\)中高度等于\(i\)的,因为为了防重,所以只记录右边高度等于\(i\)的。当\(l_i\)和\(r_i\)对应的位置时还有\([......
  • 在flink-1.17中测试执行流处理版本的单词计数程序时,出现"Exception in thread "Thread
    场景描述采用单作业模式提交作业后发现报错了 报错内容Exceptioninthread“Thread-5”java.lang.IllegalStateException:Tryingtoaccessclosedclassloader.Pleasecheckifyoustoreclassloadersdirectlyorindirectlyinstaticfields.Ifthestacktrace......
  • 旋转编码器中断方式实现计数
    旋转编码器正转两路信号相位关系旋转编码器反转两路信号相位关系↓↓↓↓利用中断方式实现编码器计数↓↓↓↓↓int32_tEncoderNum=0;/*初始化PA0,PA1,PA4,打开EXTI中断*/voidEncoder_GPIO_Init(void){/*PA0=S1,PA1=S2,PA4=KEY*/__HAL_RCC_GPIOA_CLK_ENABLE();......
  • Solution Set - 组合计数
    CF40ENumberTableLink&Submission.显然\(n,m\)奇偶性不同时无解。奇偶性相同时,假设有一行全为空,剩下每行至少一个有空,则除这些位置外没有限制的位置都可以随便填,这些位置一定有唯一可行方案。又因为\(k\lt\max(n,m)\),所以一定有一行或一列为空。假设是一行,如果有其它行全......
  • Lnton羚通AI云算力平台在OpenCV-Python中如何创建计数器
    CVUI之计数器cvui::counter()为一个整型或者double值渲染一个计数器,可以点击向上或向下增加或减少值。PythonCPP原型参数theWhere:画布theX:绘制的XtheY:绘制的YtheValue:值theStep:间隔theFormat:格式化的值或数字。例如,%d或%.2f。theFontScale:字体大小theInsideColo......
  • 1-5可编程定时器/计数器 8253 实验
    EXTRNInitKeyDisplay:NEAR,Display8A:NEARIO8259_0EQU0250HIO8259_1EQU0251HCOM_ADDREQU0263HT2_ADDREQU0262H_STACKSEGMENTSTACKDW100DUP(?)_STACKENDS_DATASEGMENTWORDPUBLIC'DATA'BUFFERDB8DUP(?)CounterDB?ReDisplayFlagDB......
  • 数字计数
    [P2602ZJOI2010]数字计数可以分开考虑每种数,然后对于每种数,利用前缀和的思想,\(f(l,r)=f(r)-f(l-1)\),我们只要求出\(0\simn\)之间的个数即可。我们考虑爆搜,需要记录当前处理到的位数,前导零,是否有限制,要求数的个数即可,然后转移。由于这些信息都很小,把它们当作动态规划的状态......
  • P4017 最大食物链计数 (DAG拓扑排序)
    空降锣鼓1题目分析首先,要知道这道题是Topo拓扑排序。不妨先从拓扑排序定义下手,分析题目的性质。经分析得:食物链中的生物——节点生物之间的关系——有向边为了方便描述,我们将不会捕食其他生物的生产者叫做最佳生产者不会被其他生物捕食的消费者叫做最佳消费......
  • [校内] 计数练习
    0811T1计数练习题意作为一名普及组选手,小\(A\)喜欢数数。一天,小\(A\)学习了排列相关的知识。定义一个长度为\(n\)的序列\(p_{1...n}\)是一个\(n\)阶排列,当且仅当\(p_{1...n}\)都是\([1,n]\)中的正整数且它们两两不同。小\(A\)想数排列。为了让数排列更有趣,......