1. 程式人生 > >hdu 2643 rank 第二類斯特林數

hdu 2643 rank 第二類斯特林數

ini using cout cin type log ios cnblogs sum

題意:給定n個人,要求這n個人的所有可能排名情況,可以多個人並列(這個是關鍵)。

題解:由於存在並列的問題,那麽對於n個人,我們最多有n個排名,枚舉一下1~n,累加一下就好。(註意這裏是變種的斯特林數——每個子集合是可互相區分的)。

ac代碼:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll s[110][110];
ll f[110];
const ll mod=20090126
; void init() { for(int i=1;i<=100;i++) s[i][i]=1,s[i][0]=0; for(int i=1;i<=100;i++) { for(int j=1;j<=i-1;j++) { s[i][j]=(j*s[i-1][j]+s[i-1][j-1])%mod; } } f[0]=1; f[1]=1; for(int i=2;i<=100;i++) f[i]=(f[i-1]*i)%mod; } int main() { init();
//cout<<s[3][2]<<endl; int t; cin>>t; while(t--) { ll x; cin>>x; ll sum=0; for(int i=1;i<=x;i++) { sum=(sum+f[i]*s[x][i])%mod; } cout<<sum<<endl; } return 0; }

hdu 2643 rank 第二類斯特林數