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

Problem Description
大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!
做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。
话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做错了!大家都学过概率论,应该知道出现这种情况的概率,所以至今我都觉得这是一件神奇的事情。如果套用一句经典的评语,我们可以这样总结:一个人做错一道选择题并不难,难的是全部做错,一个不对。

不幸的是,这种小概率事件又发生了,而且就在我们身边:
事情是这样的——HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟!

现在的问题是:请大家帮可怜的8006同学计算一下,一共有多少种可能的错误方式呢?

Input
输入数据包含多个多个测试实例,每个测试实例占用一行,每行包含一个正整数n(1< n<=20),n表示8006的网友的人数。

Output
对于每行输入请输出可能的错误方式的数量,每个实例的输出占用一行。

Sample Input
2
3

Sample Output
1
2

思路:
假如有n个数,已知n-1的错排方法一共为f(n-1)中,n-2的错排方法为f(n-2)种。

假如取第一个数 a1.
a1可以和2到n-这n-1个数来交换。
假如a1到ak的位置,{
1、ak到a1的位置,此时n-2个数字错排就为f(n-2)种。
2、ak不到a1的位置,此时情况就是n-1个数错排,也就是f(n-1)种情况。
}

所以,递推公式就出来了。
公式见代码。

import java.util.Scanner;

public class Main{
    static long[] db = new long[21];
    public static void main(String[] args) {
        dabiao();

        Scanner sc = new Scanner(System.in);

        while(sc.hasNext()){
            int n = sc.nextInt();

            System.out.println(db[n]);
        }
    }
    private static void dabiao() {
        db[0]=0;
        db[1]=0;
        db[2]=1;
        db[3]=2;
        for(int i=4;i<db.length;i++){
            db[i]=(i-1)*(db[i-2]+db[i-1]);
        }

    }

}
时间: 2024-10-31 01:28:02

HDOJ(HDU) 1465 不容易系列之一(错排)的相关文章

HDU 2048:递推&amp;amp;错排概率

神.上帝以及老天爷 http://acm.hdu.edu.cn/showproblem.php?pid=2048 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description HDU 2006'10 ACM contest的颁奖晚会隆重开始了! 为了活跃气氛,组织者举行了一个别开生面.奖品丰厚的抽奖活动,这个活动的具体要求是这样的: 首先,所有参加晚会的人员

错排公式 详细解答

错排问题 错排问题 就是一种递推式,不过它比较著名且常用,所以要熟记! 错排问题:有n个正整数1,2,3,--n,将这n个正整数重新排列,使其中的每一个数都不在原来的位置上,这种排列称为正整数1,2,3,--n的错排,问这n个正整数的排个数是多少? 设这n个正整数的错排个数为an,为了探求an的表达式,我们先从最特殊的情形入手. 当n=1时,由于只有一个数1,不可能有错排,所以a1=0. 当n=2时,两个数的错排是唯一的,所以a2=1. 当n=3时,三个数1.2.3只有2.3.1和3.1.2两种

错排

 问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放的位置.有几种摆法? 这个问题推广一下,就是错排问题,是组合数学中的问题之一.考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排. n个元素的错排数记为D(n). 研究一个排列错排个数的问题,叫做错排问题或称为更列问题. 错排问题最早被尼古拉·伯努利和欧拉研究,因此历史上也称为伯努利-欧拉的装错信封的问题.这个问题有许多具体的版本,如在写信时将n封信装到n个不同的信封里

[LeetCode] Find the Derangement of An Array 找数组的错排

In combinatorial mathematics, a derangement is a permutation of the elements of a set, such that no element appears in its original position. There's originally an array consisting of n integers from 1 to n in ascending order, you need to find the nu

hdu 4531吉哥系列故事之乾坤大挪移

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4531 这道搜索题挺恶心的...比赛时没有写出来. 首先要解决的问题是怎样判断符合条件的状 态,即所有一样的颜色是连在一起的.我是采用最简单也最搓的方法,按上下左右顺序给每一个小三角 形标号1-36,然后建立一张邻接矩阵图,然后bfs判断. 然后就是主要的暴力枚举部分,每次有 12种状态转移的选择,开始时用dfs,但爆栈了.然后改成bfs,又各种TLE.然后就是不断地优化优化. 判重的状态可以用一个

hdu 4530 小Q系列故事——大笨钟

点击打开链接hdu 4530 思路: 1 当p = 1 ,正常的走了k*60秒那么大笨钟走了k*(60-x) 2 当p = 2 ,大笨钟走了k*60秒那么正常走了60*k*(60/(60-x)) 3 当p = 3 ,那么我们可以先算出第一次相遇用了多少时间,然后乘上k次即可.根据大笨钟1分钟少走x秒,那么一圈少走了12*60*x秒,那么第一次相遇的时候正常走了(12*3600)/(12*60*x)圈即60/x,那么k次就是k*60/x也就是12*3600*k*60/x秒 代码: #include

HDOJ/HDU 1161 Eddy&amp;#39;s mistakes(大写字母转换成小写字母)

Problem Description Eddy usually writes articles ,but he likes mixing the English letter uses, for example "computer science" is written frequently "coMpUtEr scIeNce" by him, this mistakes lets Eddy's English teacher be extremely disco

HDOJ/HDU 1087 Super Jumping! Jumping! Jumping!(经典DP~)

Problem Description Nowadays, a kind of chess game called "Super Jumping! Jumping! Jumping!" is very popular in HDU. Maybe you are a good boy, and know little about this game, so I introduce it to you now. The game can be played by two or more t

HDOJ(HDU) 2061 Treasure the new start, freshmen!(水题、)

Problem Description background: A new semester comes , and the HDU also meets its 50th birthday. No matter what's your major, the only thing I want to tell you is:"Treasure the college life and seize the time." Most people thought that the colle