首页 > 其他分享 >错位排序

错位排序

时间:2023-09-01 14:44:32浏览次数:33  
标签:元素 错位 对调 位置 排序 dp

将1到n的自然数放到1到n的n个位置,其中元素i不放在位置i,求方案总数。

状态:dp[i]表示前i个位置错位排序的方案数
答案:dp[n]
状态转移方程:
\(dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2])\)
情况1:前i-1个位置有0个位置是元素与下标相同的,将元素i与前i-1个位置的任一元素对调构成错位,贡献为 \((i - 1) * dp[i -1]\)
情况2:前i-1个位置有1个位置j是元素与下标相同的,将i和j对调,则贡献为 $(i - 1) * dp[i - 2] $
初始状态:

\(dp[1] = 0, dp[2] = 1\)

标签:元素,错位,对调,位置,排序,dp
From: https://www.cnblogs.com/libohan/p/17671849.html

相关文章

  • C++ 数组排序 查找。数值排序、冒泡排序以及顺序查找的方法
    #include<iostream>#include<cstring>#include<algorithm>#include<ctime>#defineMAX8usingnamespacestd; intmain() {   inta[MAX]={1,5,9,6,3,1,4,6};  for(inti=0;i<MAX;i++)   cout<<a[i]<<"";    ......
  • js实现汉字中文排序
    js实现汉字中文排序的方法数组内的元素是对象,以对象某一个属性进行排序vararr=[{name:'南京',code:'09',info:{province:'江苏'}},{name:'北京',code:'01',info:{province:'北京'}},{name:'上海',code:'02&......
  • 选择排序输出多轮学号
    题目描述有n名学生从左往右排成一行站成队列,学号是1至n。给出这n名学生的身高,学号是i的学生的身高是h[i],所有学生的身高都不相同。现在进行n-1轮操作,第i轮操作由如下三个步骤构成:第一步:从当前学生队列排在第i个位置的学生至排在最后一个位置的学生当中,选出身高最矮的学生,不妨假......
  • vue sort 排序
    Vue.js提供了多种实现排序的方式。下面列举了几种常见的排序方法及示例代码。 1、使用JavaScript原生的Array.prototype.sort()方法进行排序。这种方法适用于简单的数组排序需求。//在Vue组件中的方法中使用sort方法进行排序data(){return{myArray:[3,1,2,4......
  • hive-四种排序
    数据准备200832.0200821.0200831.5200817.0201334.0201532.0201533.0201515.9201531.0201519.9201527.0201623.0201639.9201632.0建表createtableods_temperature(yearint,......
  • MySQL默认情况下的排序方式
    1、问题:今天在做开发时碰到了一个问题,使用了最简单的sql语句查询,条件中也只有一个条件,语句类似如下:SELECT*FROM`people`WHEREschool_id='1234';查询出的结果为3条,本以为应该按照数据库的插入顺序查出来,即按照主键ID的升序排列,但是得出的结果却不是,确实按照了其中一个字......
  • 插入排序:直接插入排序、折半插入排序、希尔排序的实现
    直接插入排序定义:直接插入排序是一种最简单的排序方法,其基本操作是将一条记录插入到已排好序的有序表中,从而得到一个新的、记录数量增1的有序表。算法的代码:#include<stdio.h>#include<stdlib.h>voidprint_series(constintseries[],intlen){for(inti=0;......
  • Oracle查看占用表空间最大的表(排序)
    selectt.owner,t.segment_name,t.tablespace_name,bytes/1024/1024/1024assizes,q.num_rows,t.segment_type fromdba_segmentst leftjoindba_tablesq   ont.segment_name=q.table_name  andt.owner=q.owner wheret.segment_type='TABLE'  andt.tab......
  • 快排及链表排序
    文章目录一、普通的快排二、链表的创建三、链表的冒泡排序四、链表快排五、链表归并排序一、普通的快排voidQuickSort(vector<int>&vec,intlow,inthigh){ intpivot=vec[low];//选择第一个元素作为枢纽元 //mid总是指向最后一个比枢纽元小的位置,当需要交换元素时,先......
  • 快速排序
    快速排序是一种常见的排序算法,它的基本思想是通过分治的策略将一个大问题拆分为若干个小问题,并通过递归求解这些小问题,最终将整个问题排序完成。具体的步骤如下:选择一个基准元素,一般选择第一个元素。将序列中小于等于基准元素的元素移动到基准元素的左边,大于基准元素的元素移......