• lightoj1326_第二类Stirling


    题目链接http://lightoj.com/volume_showproblem.php?problem=1326

    1051 - Good or Bad
    Time Limit: 2 second(s) Memory Limit: 32 MB

    A string is called bad if it has 3 vowels in a row, or 5 consonants in a row, or both. A string is called good if it is not bad. You are given a string s, consisting of uppercase letters ('A'-'Z') and question marks ('?'). Return "BAD" if the string is definitely bad (that means you cannot substitute letters for question marks so that the string becomes good), "GOOD" if the string is definitely good, and "MIXED" if it can be either bad or good.

    The letters 'A', 'E', 'I', 'O', 'U' are vowels, and all others are consonants.

    Input

    Input starts with an integer T (≤ 200), denoting the number of test cases.

    Each case begins with a non-empty string with length no more than 50.

    Output

    For each case of input you have to print the case number and the result according to the description.

    Sample Input

    Output for Sample Input

    5

    FFFF?EE

    HELLOWORLD

    ABCDEFGHIJKLMNOPQRSTUVWXYZ

    HELLO?ORLD

    AAA

    Case 1: BAD

    Case 2: GOOD

    Case 3: BAD

    Case 4: MIXED

    Case 5: BAD

    第一类Stirling数 s(p,k)

        

    s(p,k)的一个的组合学解释是:将p个物体排成k个非空循环排列的方法数。

    s(p,k)的递推公式: s(p,k)=(p-1)*s(p-1,k)+s(p-1,k-1) ,1<=k<=p-1

    边界条件:s(p,0)=0 ,p>=1  s(p,p)=1  ,p>=0

     

    递推关系的说明:

    考虑第p个物品,p可以单独构成一个非空循环排列,这样前p-1种物品构成k-1个非空循环排列,方法数为s(p-1,k-1);

    也可以前p-1种物品构成k个非空循环排列,而第p个物品插入第i个物品的左边,这有(p-1)*s(p-1,k)种方法。

     

    第二类Stirling数 S(p,k)

       

    S(p,k)的一个组合学解释是:将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。

    k!S(p,k)是把p个人分进k间有差别(如:被标有房号)的房间(无空房)的方法数。

       

    S(p,k)的递推公式是:S(p,k)=k*S(p-1,k)+S(p-1,k-1) ,1<= k<=p-1

    边界条件:S(p,p)=1 ,p>=0    S(p,0)=0 ,p>=1

      

    递推关系的说明:

    考虑第p个物品,p可以单独构成一个非空集合,此时前p-1个物品构成k-1个非空的不可辨别的集合,方法数为S(p-1,k-1);

    可以前p-1种物品构成k个非空的不可辨别的集合,第p个物品放入任意一个中,这样有k*S(p-1,k)种方法。

      

    第一类斯特林数和第二类斯特林数有相同的初始条件,但递推关系不同。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <cstdio>
     6 #include <vector>
     7 #include <ctime>
     8 #include <queue>
     9 #include <list>
    10 #include <set>
    11 #include <map>
    12 using namespace std;
    13 #define INF 0x3f3f3f3f
    14 typedef long long LL;
    15 
    16 const int mod = 10056;
    17 LL res[1010][1010], ans[1010][1010], x[1010], y[1010];
    18 void init()
    19 {
    20     x[1] = 1;
    21     for(int i = 2; i <= 1000; i++)
    22         x[i] = (x[i-1] * i) % mod;
    23     memset(res, 0, sizeof(res));
    24     res[1][1] = 1, y[1] = 1;
    25     for(int i = 2; i <= 1000; i++)
    26     {
    27         for(int j = 1; j <= i; j++)
    28         {
    29             res[i][j] = (j*res[i-1][j]%mod + res[i-1][j-1])%mod;
    30             ans[i][j] = (res[i][j] * x[j]) % mod;
    31             y[i] = (y[i]+ans[i][j]) % mod;
    32         }
    33     }
    34 }
    35 int main()
    36 {
    37     int t, n;
    38     init();
    39     scanf("%d", &t);
    40     for(int ca = 1; ca <= t; ca++)
    41     {
    42         scanf("%d", &n);
    43         printf("Case %d: %lld
    ", ca, (y[n]+mod)%mod);
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    219. Contains Duplicate II
    189. Rotate Array
    169. Majority Element
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    118. Pascal's Triangle
    88. Merge Sorted Array
    53. Maximum Subarray
    CodeForces 359D Pair of Numbers (暴力)
  • 原文地址:https://www.cnblogs.com/luomi/p/5954610.html
Copyright © 2020-2023  润新知