题目描述 Description

转眼毕业了,曾经朝夕相处的同学们不得不都各奔东西,大家都去了不同的城市开始新的生活。在各自城市居住了一段时间后,他们都感到了一些厌倦,想去看看其他人的生活究竟如何,于是他们都选择到另一个同学所在城市去旅游,并且希望旅游的城市各不相同,他们想知道有多少种不同的方案,可是数量实在太多了,他们无法计算出来,你能帮助他们吗。

 输入输出格式 Input/output
输入格式:
一个正整数n(n<200),表示人数。
输出格式:
一个数,表示有多少不同的方案。
 输入输出样例 Sample input/output
样例测试点#1

输入样例:

3
输出样例:

2

提示:
有如下两种方案:
同学1去同学2的城市,同学2去同学3的城市,同学3去同学1的城市。
同学1去同学3的城市,同学3去同学2的城市,同学2去同学1的城市。

思路:  

  为了简化题目,以下我用“元素”表示每位同学,用“位置”表示他们所到达的城市,当n个元素放在n个位置,我们可以用D(n)表示元素与位置各不对应的方法数,那么D(n-1)就表示n-1个元素放在n-1个位置,D(n-1)则表示n-1个元素所产生的的各不对应的方法数,以此类推:

  第一步:我们可以把第n个元素放在一个位置k,一共有n-1种放法。

  第二步:放编号为k的元素,这时候就会出现两种情况:

①将它放到n原来所在的位置,那么对于剩下的n-1个元素,因为第k个元素放到了位置n,剩下n-2个元素就会有D(n-2)种放法;

②那么第k个元素不把它放到n原来所在的位置,而是放到其他的位置,这时候,对于这n-1个元素,就会出现D(n-1)种放法

总的来说,n不能移动到自己所在的位置,所以总的移动次数应该是n-1次,因此,递推公式就是两种情况的综合再乘以要移动的元素个数,即:D(n)=(n-1)[D(n-1)+D(n-2)],这个递推式就是有名的错排问题

特殊情况:当n=1时,D(n)=0;当n=2时,D(n)=1

  所以这题就可以变得十分简单了,但写完代码你会发现,当n=13时,就会超出int范围,所以必须使用高精度算法求解,我为了偷懒,就没有打高精度的代码,以下就是我直接根据公式写出来的代码。

代码如下:

 #include <stdio.h>
int D(int n)
{
if(n==) return ;
else if(n==) return ;
else return (D(n-)+D(n-))*(n-);
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",D(n));
return ;
}

Openjudge-NOI题库-旅行-数论的更多相关文章

  1. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  2. NOI题库 1768最大子矩阵 题解

    NOI题库 1768最大子矩阵  题解     总时间限制: 1000ms 内存限制: 65536kB   描述   已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...

  3. NOI题库 09:图像旋转翻转变换

    NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...

  4. NOI题库-小学奥赛QwQ

    今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...

  5. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35

    T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...

  6. noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45

    T36 计算多项式的值 描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在flo ...

  7. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T21——T30

    T21:单词替换 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替 ...

  8. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

    T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= ...

  9. noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15

    T06 笨小猴 描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词 ...

随机推荐

  1. 快速创建InfoPath表单

    快速创建InfoPath表单 2010年已经过去了一半了,这时候再说初识InfoPath可能会被很多人笑话,但是又有多少人真正认识InfoPath呢?无论你是刚刚 听说这个东西还是它的老相好都请同我一 ...

  2. POJ 2337 输出欧拉路径

    太无语了. 这道题做了一整天. 主要还是我太弱了. 以后这个就当输出欧拉路径的模版吧. 题目中的输出字典序最小我有点搞不清楚,看了别人是这么写的.但是我发现我过不了后面DISCUSS里面的数据. 题意 ...

  3. ODP.NET Managed正式推出

    NET Oracle Developer的福音——ODP.NET Managed正式推出 在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要 ...

  4. NetCat,在网络工具中有“瑞士军刀”美誉

    nc命令详解   NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本.因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小).功能实用,被设计为一个简单.可 ...

  5. [置顶] 从引爆点的角度看360随身wifi的发展

    从引爆点的角度看360随身wifi的发展 不到一个月的时间,随身wifi预定量就数百万.它的引爆点在哪里,为什么相同的产品这么多它却能火起来,通过对随身wifi的了解和我知识层面分析,主要是因为随身w ...

  6. IceMx.Mvc

    IceMx.Mvc 我的js MVC 框架 开篇 开篇 这篇文章是后补的,前端时间想写一些对于js开发的一些理解,就直接写了,后来发现很唐突,所以今天在这里补一个开篇. 我的js Mvc 框架 基于实 ...

  7. tomcat的OutOfMemoryError内存溢出解决方法

    在tomcat安装路径bin目录下 打开catalina.bat在第一行加上 set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSi ...

  8. Ruby编码

    目录 背景字符串可以使用不同的编码编码转换编码强制不同编码的字符串相加后是啥结果?一直没使用过的\u和\x使用Sublime开发Ruby时,输出到控制台的字符串为啥不能使用多种编码?备注 背景返回目录 ...

  9. Excel 自定义函数

    浅谈Excel开发:四 Excel 自定义函数   我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比 ...

  10. opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示

    具体过程参考的是这篇BLOG: http://wiki.woodpecker.org.cn/moin/lilin/swig-glBmpContext 这一片BLOG的代码有个 BOOL SaveBmp ...