• HDU2512 一卡通大冒险 —— 第二类斯特林数


    题目链接:https://vjudge.net/problem/HDU-2512

    一卡通大冒险

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2572    Accepted Submission(s): 1741


    Problem Description
    因为长期钻研算法, 无暇顾及个人问题,BUAA ACM/ICPC 训练小组的帅哥们大部分都是单身。某天,他们在机房商量一个绝妙的计划"一卡通大冒险"。这个计划是由wf最先提出来的,计划的内容是,把自己的联系方式写在校园一卡通的背面,然后故意将自己的卡"遗失"在某处(如水房,TD,食堂,主M。。。。)他们希望能有MM看到他们遗失卡,能主动跟他们联系,这样就有机会请MM吃饭了。他们决定将自己的一卡通夹在基本相同的书里,然后再将书遗失到校园的各个角落。正当大家为这个绝妙的计划叫好时,大家想到一个问题。很明显,如果只有一张一卡通,那么只有一种方法,即,将其夹入一本书中。当有两张一卡通时,就有了两种选择,即,将两张一卡通夹在一本书里,或者分开夹在不同的书里。当有三张一卡通时,他们就有了5种选择,即:
    {{A},{B},{C}} , {{A,B},{C}}, {{B,C},{A}}, {{A,C},{B}} ,{{A,B,C}} 于是,
    这个邪恶计划的组织者wf希望了解,如果ACM训练对里有n位帅哥(即有N张一卡通),那么要把这些一卡通夹到书里有多少种不同的方法。
     
    Input
    包含多组数据,第一行为n,表示接下来有n组数据。以下每行一个数x,表示共有x张一卡通。(1≤x≤2000).
     
    Output
    对每组数据,输出一行:不同的方法数,因为这个数可能非常大,我们只需要它除以1000的余数。
     
    Sample Input
    4 1 2 3 100
     
    Sample Output
    1 2 5 751
     
    Author
    BUAA Campus 2007
     
    Source

    题解:

    单纯的第二类斯特林数。由于没有要求组数,因此对 S[n][k] 求和, 其中1<=k<=n 。

    代码一:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <cmath>
     7 #include <queue>
     8 #include <stack>
     9 #include <map>
    10 #include <string>
    11 #include <set>
    12 using namespace std;
    13 typedef long long LL;
    14 const int INF = 2e9;
    15 const LL LNF = 9e18;
    16 const int MOD = 1e3;
    17 const int MAXN = 2e3+10;
    18 
    19 LL S[MAXN][MAXN], f[MAXN];
    20 
    21 void init()
    22 {
    23  //   memset(S, 0, sizeof(S));
    24     for(int i = 1; i<MAXN; i++)
    25     {
    26         S[i][0] = 0; S[i][i] = 1;
    27         for(int j = 1; j<i; j++)
    28             S[i][j] = ((j*S[i-1][j])%MOD + S[i-1][j-1])%MOD;
    29     }
    30 
    31     memset(f, 0, sizeof(f));
    32     for(int i = 1; i<MAXN; i++)
    33         for(int j = 1; j<=i; j++)
    34             f[i] = (f[i] + S[i][j])%MOD;
    35 }
    36 
    37 int main()
    38 {
    39     int T, n;
    40     scanf("%d", &T);
    41     init();
    42     while(T--)
    43     {
    44         scanf("%d", &n);
    45         printf("%d
    ", f[n]);
    46     }
    47 }
    View Code

    代码二:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <cmath>
     7 #include <queue>
     8 #include <stack>
     9 #include <map>
    10 #include <string>
    11 #include <set>
    12 using namespace std;
    13 typedef long long LL;
    14 const int INF = 2e9;
    15 const LL LNF = 9e18;
    16 const int MOD = 1e3;
    17 const int MAXN = 2e3+10;
    18 
    19 LL S[2][MAXN], f[MAXN];
    20 
    21 void init()
    22 {
    23     int cur = 0;
    24     memset(f, 0, sizeof(f));
    25     for(int i = 1; i<MAXN; i++)
    26     {
    27         S[cur][0] = 0; S[cur][i] = 1;
    28         for(int j = 1; j<i; j++)
    29             S[cur][j] = ((j*S[!cur][j])%MOD + S[!cur][j-1])%MOD;
    30 
    31         for(int j = 1; j<=i; j++)
    32             f[i] = (f[i] + S[cur][j])%MOD;
    33 
    34         cur ^= 1;
    35     }
    36 }
    37 
    38 int main()
    39 {
    40     int T, n;
    41     scanf("%d", &T);
    42     init();
    43     while(T--)
    44     {
    45         scanf("%d", &n);
    46         printf("%d
    ", f[n]);
    47     }
    48 }
    View Code
  • 相关阅读:
    购物英语词汇
    生活学习英语词汇
    银行英语词汇
    烹饪英语词汇
    旅游英语词汇
    饮食英语词汇
    书英语词汇
    王元编辑口语资料中国传统之节日
    DataSet在WCF中怎么办?
    Python生成Wav格式文件
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/8335707.html
Copyright © 2020-2023  润新知