A. 【例题1】错排问题


题目描述

求多少个

n

n

n个数的排列

A

A

A ,满足对于任意的

i

(

1

i

n

)

i(1 ≤ i ≤ n)

i(1≤i≤n) 使

A

i

i

Ai ≠ i

Ai​=i 。


输入格式

一个整数 。


输出格式

一个整数,表示答案。


样例

  • 输入样例

2

  • 输出样例

1


数据范围与提示

对于

100

%

100\%

100%的数据,

1

n

20

1 ≤ n ≤ 20

1≤n≤20。


题目解析

首先这道题我们考虑递推;

首先,先以

f

(

1

)

=

0

,

f

(

2

)

=

1

f(1) = 0,f(2) = 1

f(1)=0,f(2)=1.(手推

1

,

2

1,2

1,2项您总会吧)
再从

3

3

3开始进行递推.

考虑从

n

n

n个数分别放在不同的位置有

n

n

n种方法,那么不放在原位就有

n

1

n-1

n−1种方法.
再考虑从

n

n

n中提取一个数

l

l

l.
考虑两种情况

  1. l

    l

    l放在原位上:那么除

    l

    l

    l外的

    n

    1

    n-1

    n−1个数的方法就为

    f

    (

    n

    2

    )

    f(n-2)

    f(n−2)
    (

    n

    1

    n-1

    n−1个数放在不同的位置,有

    n

    1

    n-1

    n−1种方法)

  2. 不把

    l

    l

    l放在原位上:那么对于剩余的

    n

    1

    n-1

    n−1个数就可以放在任何位,那么就是

    f

    (

    n

    1

    )

    f(n-1)

    f(n−1)种方法(同

    n

    n

    n个数分别放在不同的位置,不放在原位的就是

    l

    l

    l)

那么我们就很容易可以得出递推式:

f

(

i

)

=

{

f

(

1

)

=

0

f

(

2

)

=

1

f

(

i

)

=

(

n

1

)

(

f

(

n

1

)

+

f

(

n

2

)

)

(

i

>

2

)

f(i) = \left\{\begin{matrix} &~~~~~~~f(1) = 0~~~~~~~~~f(2) = 1~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \\ & f(i) = (n - 1) * (f(n-1)+f(n-2)) ~~~~~~~~~~~(i>2)\\ \end{matrix}\right.

f(i)={​       f(1)=0         f(2)=1                                                         f(i)=(n−1)∗(f(n−1)+f(n−2))           (i>2)​


Code

小小的提醒:

20

20

20的数据也要开

l

o

n

g

long

long

l

o

n

g

long

long

#include <cstdio>
#include <iostream>
#define ll long long
using namespace std; ll n, ans, a[25]; int main ()
{
scanf ("%lld", &n);
a[2] = 1;
for (int i = 3; i <= n; ++ i)
a[i] = (i - 1) * (a[i - 1] + a[i - 2]);
printf ("%lld", a[n]);
return 0;
}

[递推] A. 【例题1】错排问题的更多相关文章

  1. HDU 2068 RPG的错排

    要求答对一半或以上就算过关,请问有多少组答案能使他顺利过关. 逆向思维,求答错一半或以下的组数 1,错排 错排公式的由来 pala提出的问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放 ...

  2. 致初学者(四):HDU 2044~2050 递推专项习题解

    所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果.其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定.关于递推的知识可以参阅本博客中随笔“递推 ...

  3. HDU 2048:神、上帝以及老天爷(错排公式,递推)

    神.上帝以及老天爷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  4. ACM_错排(递推dp)

    RPG的错排 Time Limit: 2000/1000ms (Java/Others) Problem Description: 今年暑假GOJ集训队第一次组成女生队,其中有一队叫RPG,但做为集训 ...

  5. 错排-HDU 2049 递推的应用

    当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个 ...

  6. 不容易系列之一(hdu1465)错排+递推

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. HDU 2048 神、上帝以及老天爷 【递推】【错排】

    题目链接 Problem Description HDU 2006'10 ACM contest的颁奖晚会隆重开始了!为了活跃气氛,组织者举行了一个别开生面.奖品丰厚的抽奖活动,这个活动的具体要求是这 ...

  8. 神、上帝以及老天爷--hdu2048(错排,递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2048 1. N张字条的所有可能排列自然是N!(分母). 现在的问题就是求N张字条的错排数f(N)(分子 ...

  9. hdu2068-RPG的错排-(dp递推式)

    去年看错排公式,死都看不懂,基础扎实之后再来看就略懂了. 公式: dp[ n ] = ( n-1 ) * ( dp[n-1] + dp[n-2] ) 解析公式:比如有n个元素,各对应n个正确位置,dp ...

随机推荐

  1. js & input event & input change event

    js & input event & input change event vue & search & input change <input @click=& ...

  2. 2. Vue语法--插值操作&动态绑定属性 详解

    目录 1. 设置vue模板 2. vue语法--插值操作 3. 动态绑定属性--v-bind 一. 设置vue模板 我们经常新建一个vue项目的时候, 会写如下的一段代码 <!DOCTYPE h ...

  3. 百度webuploader_c#实现文件分片上传思路

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. python进阶(4)文件操作

    文件操作 文件操作主要包括对文件内容的读写操作,这些操作是通过文件对象实现的,通过文件对象可以读写文本文件和二进制文件 open(file, mode='r', buffering=-1, encod ...

  5. 后端程序员之路 28、一个轻量级HTTP Server的实现

    提到http server,一般用到的都是Apache和nginx这样的成熟软件,但是,有的情况下,我们也许也会用一些非常轻量级的http server.http server的c++轻量级实现里,M ...

  6. 8.Vue组件三---slot插槽

    主要内容:  1. 什么是插槽 2. 组件的插槽 3. 插槽的使用方法 4. 插槽的具名 5. 变量的作用域 6. slot的作用域 一. 什么是插槽呢? 1. 生活中的插槽有哪些呢? usb插槽, ...

  7. sentry SSRF

    目录 Sentry介绍 exp测试步骤 自己构造blind发包 修复方式 参考 Sentry介绍 Sentry 是一个实时的事件日志和聚合平台,基于 Django 构建.一般在url上.或者logo上 ...

  8. 剑指 Offer 49. 丑数 + 小根堆 + 动态规划

    剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...

  9. Java-Socket通信 知识点记录

    目录 一.Socket基本案例 二.消息通信 2.1 双向通信 2.2 告知发送结束 2.2.1 通过Socket关闭 2.2.2 通过Socket关闭输出流的方式 2.2.3 通过约定符号 2.2. ...

  10. javaScript操作cookie出现同名key

    引文: 网上查找js操作cookie文章发现百度千篇一律全是同样的代码,使用过程中发现一个bug,设置cookie导致出现多个同名key的cookie,官网cookie文档内未提及,下文将标出问题点, ...