Openjudge-NOI题库-旅行-数论
题目描述 Description
转眼毕业了,曾经朝夕相处的同学们不得不都各奔东西,大家都去了不同的城市开始新的生活。在各自城市居住了一段时间后,他们都感到了一些厌倦,想去看看其他人的生活究竟如何,于是他们都选择到另一个同学所在城市去旅游,并且希望旅游的城市各不相同,他们想知道有多少种不同的方案,可是数量实在太多了,他们无法计算出来,你能帮助他们吗。
输出格式:
输入样例:
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题库-旅行-数论的更多相关文章
- NOI题库刷题日志 (贪心篇题解)
这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点( ...
- NOI题库 1768最大子矩阵 题解
NOI题库 1768最大子矩阵 题解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...
- NOI题库 09:图像旋转翻转变换
NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...
- NOI题库-小学奥赛QwQ
今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...
- noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35
T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...
- noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45
T36 计算多项式的值 描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在flo ...
- noi题库(noi.openjudge.cn) 1.7编程基础之字符串T21——T30
T21:单词替换 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替 ...
- noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20
T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= ...
- noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15
T06 笨小猴 描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词 ...
随机推荐
- ASP.NET WebApi 入门
今天参照微软官方(http://www.asp.net)学习了WebApi,在这里摘录如下: 前言 HTTP 不只是为了生成 web 页面.它也是一个强大的平台,可以建设公开服务和数据的 Api.HT ...
- Effective C++(13) 用对象管理资源
问题聚焦: 从这条准则开始,都是关于资源管理的. 资源,一旦用了它,将来必须还给系统. 本条准则,基于对象的资源管理办法,建立在C++的构造函数,析构函数和拷贝函数(拷贝构造函数和重载赋值操作符)的基 ...
- NUnit使用方法
单元测试是一个成熟项目必不可少的一个环节,NUnit很好的提供了测元测试的一些方法,以下是我得出的一点点经验以及NUnit的一点点实际应用中用到的内容.写的有点儿乱,不懂下面留言.谢谢~ 准备NUni ...
- 关于Django模板引擎的研究
原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not found.1其原因是没有给视 ...
- Mac 下ll命令 command not found
在linux下习惯使用ll.la.l等ls别名的童鞋到mac os提示command not found -461deMacBook-Pro:~ root# cd ~ -461deMacBook-Pr ...
- 32位Windows7
32位Windows7 利用多余的不能识别的电脑内存 RAMDISK5.5教程 32位Windows7 利用多余的不能识别的电脑内存 RAMDISK5.5教程 环境:Windows7 32位 Ul ...
- xhEditor入门基础
一.下载最新版本xhEditor:http://xheditor.com/download (官网无法下载,CSDN提供下载:http://download.csdn.net/detail/itmy ...
- CFileDialog类与16进制格式的dat文件
CFileDialog类与16进制格式的dat文件 要将数据保存为.dat文件,而且是16进制的数字,怎么保存? 要读取.dat文件,文件是16进制的,怎么读取? 用CFileDialog类可以得到[ ...
- C语言中的调试小技巧
C语言中的调试小技巧 经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的 ...
- JavaScript的基本类型总结
看了让你有收获的JavaScript的基本类型总结 Javascript是一种弱类型语言,没有明确的类型分类:网上分类的方式比较多,个人感觉不比去特别的追究细分是什么什么类型,若是能够明确的分出类 ...