zoukankan      html  css  js  c++  java
  • 4.D

    题目连接 http://acm.hust.edu.cn/vjudge/contest/125308#problem/

    题目大意 n个信封 n封信 要把所有的信都装错信封,求最多有多少种错误的方式。

    编号1~n个元素,编号1~n个位置。d[n]代表n个元素,n个位置,错误的所有方式。

    1.先放第n个元素,一共有n-1种放法

    2.放编号为k的元素,这时有两种情况⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有d(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有d(n-1)种方法;

    所以有 d[n]=(n-1)*(d[n-1]+d[n-2] );d[1]=0;d[2]=1;

    此外虽然1<n<20;但d[20]却很大,要用long long 型(lld)八个字节 19位数。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long p[25];
    void in()
    {
        p[1]=0;p[2]=1;
        for(int i=3;i<=20;i++)
        p[i]=(i-1)*(p[i-1]+p[i-2]);
    
    }
    int main()
    {
        in();
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            printf("%lld
    ",p[n]);
        }
        return 0;
    }
  • 相关阅读:
    UE 不生成.bak文件
    DOTWeen 使用
    unity admob
    UGUI 判断元素进入舞台
    unity 解决ScrollRect嵌套滚动问题
    oc字符串与c字符串转换和拷贝
    Object-c中的单例
    JAVA比较两个List集合的方法
    CentOS 7 配置静态IP
    CentOS7安装Jdk1.8
  • 原文地址:https://www.cnblogs.com/Twsc/p/5727017.html
Copyright © 2011-2022 走看看