RPG的错排

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 8996    Accepted Submission(s): 3699

Problem Description
今年暑假杭电ACM集训队第一次组成女生队,当中有一队叫RPG,但做为集训队成员之中的一个的野骆驼居然不知道RPG三个人详细是谁谁。RPG给他机会让他猜猜,第一次猜:R是公主。P是草儿。G是月野兔。第二次猜:R是草儿。P是月野兔,G是公主;第三次猜:R是草儿,P是公主。G是月野兔;......可怜的野骆驼第六次最终把RPG分清楚了。因为RPG的带动,做ACM的女生越来越多,我们的野骆驼想都知道她们。可如今有N多人,他要猜的次数可就多了,为了不为难野骆驼,女生们仅仅要求他答对一半或以上就算过关,请问有多少组答案能使他顺利过关。
 
Input
输入的数据里有多个case,每一个case包含一个n,代表有几个女生。(n<=25), n = 0输入结束。

 
Sample Input
1
2
0
 
Sample Output
1
1
此处运用了错排公式,错排公式具体解释例如以下:
错排公式具体解释:
当n个编号元素放在n个编号位置,元素编号与位置编号各不正确应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不正确应的方法数,其他类推.
第一步,把第n个元素放在一个位置,比方位置k,一共同拥有n-1种方法;
第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-2个元素,有M(n-1)种方法;
综上得到
D(n) = (n - 1) * [D(n - 2) + D(n - 1)]
D(1) = 0,D(2) = 1
如今解说大家疑惑的地方,或许大家对于那个D(n - 2)不疑惑。可是对于D(n - 1)的来由有点坑爹
如今进行解说,当将n这个位置的元素放在了k这个位置,那么此时将k这个位置放在n的位置,当作是k本来不是在k的位置。而是在n的位置
或许大家有点听不懂。以下有图形说明:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
这幅图表示最開始正确的序列

这幅图表示第八个与第四个进行交换了
接着就是重中之重
所谓的d[i - 1] * (i - 1)的由来就是上面这幅图,将4这个数原本的位置不再看成是第一幅的位置。而是上面这幅图的位置,那么这个图的错排就是d[i - 1] * (i - 1)
第二种easy理解的思路
因为
D[i - 1]中多加了一个元素f[i]那么这个元素能够放在D[i - 1]中错排序列中随意个,所以有(i - 1) * D[i - 1]中,
然后是假设i - 1个数中有一个没有进行错排,那么这个数与f[i]进行交换。接着剩下的全部元素进行错排有(i - 1) * D[i - 2]个
如此答案为D(n) = (n - 1) * [D(n - 2) + D(n - 1)]
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
LL ans[20];
int n;
LL getsd(LL n,LL x) {
LL ret = 1;
for(int i = 0; i < x; i ++) {
ret = ret * (n - i) /(i + 1);
}
return ret;
}
int main() {
ans[0] = 1;
ans[1] = 0;
ans[2] = 1;
for(int i = 3; i <= 15 ; i ++) {
ans[i] = (ans[i - 1] + ans[i - 2]) * (i - 1);
}
while(~ scanf("%d", &n), n) {
LL ret = ans[0];
int m = n >> 1;
for(int i = 1; i <= m; i ++) {
ret += ans[i] * getsd(n,i);
}
printf("%I64d\n",ret);
}
return 0;
}

 

HDU 2068 RPG的错排(错排公式 + 具体解释)的更多相关文章

  1. HDU 2068 RPG的错排

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

  2. [HDU 2068] RPG的错排 (错排问题)

    RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...

  3. HDU 2068 RPG错排 [错排公式]

    1.题意:1到N的序列的排列中,元素位置与元素值相对应的情况(值为i的元素在某个排列中正好排在第i个位置)大于等于序列规模一半的情况,有多少个? 2.输入输出:每组数据一个数,N,规定输入以0结尾: ...

  4. hdu2068 RPG的错排 错排+组合

    RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. HDOJ(HDU) 1465 不容易系列之一(错排)

    Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就 ...

  6. hdu 1465 不容易系列之一(错排模板)

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

  7. HDU2068 RPG的错排 —— 错排

    题目链接:https://vjudge.net/problem/HDU-2068 RPG的错排 Time Limit: 1000/1000 MS (Java/Others)    Memory Lim ...

  8. HDU 1465 不容易系列之一(错排,递归)

    简而言之,就是把n个信封全部装错的可能数.(中问题,具体看题目) //当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示, //那么M(n-1)就表示n-1个编号元素放在 ...

  9. 【js基础】js排序方法——快排+堆排+插排+选择排

    快排 Array.prototype.fastSort = function(){ var arr = this; function sort(left, right, arr){ if( left ...

随机推荐

  1. POJ - 3842 An Industrial Spy dfs(水)

    题意:给你一串数字,最少一个,最多七个,问用这里面的数字能组成多少素数,不重复. 思路:之前还遍历10000000的每一个素数,结果超时,后来发现直接dfs就可以了,只是标记一下做过的数. #prag ...

  2. Docker -- 系统整洁之道 -- 1

    在上文Docker – 系统整洁之道 – 0中已经对Docker是什么,安装Docker以及怎么运行一个简单的容器有了初步了解,这篇文章介绍Docker的一些命令和Docker镜像的使用及操作. 一些 ...

  3. js创建dom操作select

    document.getElementById("column-left").getElementsByTagName("header")[0].onclick ...

  4. thinkserer TD350 系统损坏后,数据恢复及系统重做过程

    电脑配置: 联想服务器 TD350   E5-2609V4 2*8G 2*4T+R1 塔式 单电 1.系统恢复: 试过很多种方法,均无效 2.数据恢复:  重新安装系统后,直接在D盘查找 , 原C盘的 ...

  5. HTTP 413报错

    在php中通过flash上传文件到服务器端时报413错误,原来一直以为是php.ini配置的问题,但是检查了php.ini的配置以后,发现不是php.ini的问题,最后是通过Http Analyzer ...

  6. BZOJ——1012: [JSOI2008]最大数maxnumber || 洛谷—— P1198 [JSOI2008]最大数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1012|| https://www.luogu.org/problem/show?pid=1198 T ...

  7. Nginx模型 & 惊群问题

    这篇写的不错 http://www.cnblogs.com/linguoguo/p/5511293.html Nginx为啥性能高-多进程异步IO模型 1. 对于每个worker进程来说,独立的进程, ...

  8. 我的RTOS 之二 --Threadx在skyeye上仿真測试(基于2410)

    对于RTOS 移植来说,移植平台至少要提供双方面的设备. 1.OS执行时,须要tick,所以须要提供Timer定时器 2.OS执行时,须要调度,就是挂起当前线程,把控制权交给系统,所以须要訪问系统各个 ...

  9. ORA-06575: 程序包或函数 NO_VM_DROP_PROC 处于无效状态

    SQL> drop user aaa ;   drop user aaa   ORA-00604: 递归 SQL 级别 1 出现错误 ORA-06575: 程序包或函数 NO_VM_DROP_P ...

  10. 一些优秀的学习网站(Android)

    突然发现自己学习没有总结,从今天开始会持续更新此博文,总结自己的学习情况,也便于自己时常查阅.官方文档就列举了,因为那是必读资料. 一.GitHub部分 1.我的github仓库地址 收藏了我常看的开 ...