HDU 2068 RPG的错排(错排公式 + 具体解释)
RPG的错排
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8996 Accepted Submission(s): 3699
1
2
0
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的错排(错排公式 + 具体解释)的更多相关文章
- HDU 2068 RPG的错排
要求答对一半或以上就算过关,请问有多少组答案能使他顺利过关. 逆向思维,求答错一半或以下的组数 1,错排 错排公式的由来 pala提出的问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放 ...
- [HDU 2068] RPG的错排 (错排问题)
RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...
- HDU 2068 RPG错排 [错排公式]
1.题意:1到N的序列的排列中,元素位置与元素值相对应的情况(值为i的元素在某个排列中正好排在第i个位置)大于等于序列规模一半的情况,有多少个? 2.输入输出:每组数据一个数,N,规定输入以0结尾: ...
- hdu2068 RPG的错排 错排+组合
RPG的错排 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDOJ(HDU) 1465 不容易系列之一(错排)
Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就 ...
- hdu 1465 不容易系列之一(错排模板)
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU2068 RPG的错排 —— 错排
题目链接:https://vjudge.net/problem/HDU-2068 RPG的错排 Time Limit: 1000/1000 MS (Java/Others) Memory Lim ...
- HDU 1465 不容易系列之一(错排,递归)
简而言之,就是把n个信封全部装错的可能数.(中问题,具体看题目) //当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示, //那么M(n-1)就表示n-1个编号元素放在 ...
- 【js基础】js排序方法——快排+堆排+插排+选择排
快排 Array.prototype.fastSort = function(){ var arr = this; function sort(left, right, arr){ if( left ...
随机推荐
- Spring MVC 待学习---新特性
Spring3.1新特性 一.Spring2.5之前,我们都是通过实现Controller接口或其实现来定义我们的处理器类. 二.Spring2.5引入注解式处理器支持,通过@Controller ...
- 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控--转
原文地址:http://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247483789&idx=1&sn=ae11f04780 ...
- react-native使用androidstudio时,安卓模拟器reload菜单界面显示快捷键ctrl+M;
react-native使用androidstudio时,安卓模拟器reload菜单界面显示快捷键ctrl+M:
- chmod---变更文件或目录的权限
chmod命令用来变更文件或目录的权限.在UNIX系统家族里,文件或目录权限的控制分别以读取.写入.执行3种一般权限来区分,另有3种特殊权限可供运用.用户可以使用chmod指令去变更文件与目录的权限, ...
- Swift学习笔记(13)--属性 (Properties)
普通属性用var和let即可,本文不做详述 1.延迟存储属性 延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性.在属性声明前使用@lazy来标示一个延迟存储属性. class DataImp ...
- SpringBoot与SpringCloud的区别
1.Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务:Spring Cloud是一个基于Spring Boot实现的云应用开发工具: ...
- ORACLE遞歸查詢
ORACLE支持常規的用CTE遞歸的方式實現遞歸查詢,也有自己特有的查詢方式,ORACLE文檔中叫層次數據查詢. 這裏通過一個簡單的样例來介紹這兩種查詢方式. 數據準備: CREATE TABLE T ...
- Android学习笔记(三)
ContentProvider简单介绍 ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序须要把自己的数据暴露给其它程序使用时.该应用程序便可通过提供Conten ...
- ios in-house 公布整个过程(startssl认证)
首先大体说一下步骤: 1.申请苹果enterprise 账号 为应用生成app id,provision profile等 详见:http://www.th7.cn/Program/IOS/20131 ...
- 蓝桥杯训练 2n皇后
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...