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. PPT & order & animation

    PPT & order & animation powerpoint order of appearance https://support.office.com/en-us/arti ...

  2. Headless Chrome

    Headless Chrome https://developers.google.com/web/updates/2017/04/headless-chrome Puppeteer & SS ...

  3. 聊一下PBN程序图例中的XTT

       PBN航路点的定位容差用XTT与ATT来表示,ATT=0.8*XTT.保护区半宽用1.5*XTT+BV计算得到,BV值在不同的航段取值不同. 对于A至E类航空器,距ARP 30nm以外BV值为2 ...

  4. Java的稀疏数组的简单代码实现

    目录 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 二.稀疏数组的Java代码实现思路 三.稀释数组的Java代码实现 四.结语 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 ...

  5. 微信附近的人,用redis也能实现?(GEO)

    相信微信附近的人的功能大家都应该用过 我可以很随意的通过我自己的定位能看到我附近的人,并且能看到那个人距离我的距离,大家有没有思考过这个是怎么实现的? 作为一个程序猿任何问题应该都有一个思考的过程,而 ...

  6. 13_MySQL如何去除结果集中的重复记录

    本节所涉及的sql语句 -- 去除结果集中的重复记录 SELECT job FROM t_emp; SELECT DISTINCT job FROM t_emp; SELECT DISTINCT jo ...

  7. Error running 'tomcat': Unknown error

    免费分享95套java实战项目,不仅有源码还有对应的开发视频,关注公众号『勾玉技术』回复"95"即可获取 无意中发现了一位清华大佬的算法笔记,需要的加公众号 勾玉技术 回复 清华算 ...

  8. 开源OA办公平台功能介绍:应用市场-固定资产管理(一)功能设计

    概述 应用市场-固定资产管理,是用来维护管理企业固定资产的一个功能.其整个功能包括对固定资产的台账信息.领用.调拨.借用.维修.盘点.报废等一整个生命周期的动态管理过程.力求客户安装就可以使用. 本应 ...

  9. RabbitMQ基础教程

    目录 RabbitMQ相关概念介绍 生产者和消费者 队列 交换器.路由键.绑定 交换器类型 RabbitMQ运转流程 AMQP协议介绍 AMQP生产者流转过程 AMQP消费者流转过程 安装Rabbit ...

  10. WPF -- 自定义按钮

    本文介绍WPF一种自定义按钮的方法. 实现效果 使用图片做按钮背景: 自定义鼠标进入时效果: 自定义按压效果: 自定义禁用效果 实现效果如下图所示: 实现步骤 创建CustomButton.cs,继承 ...