多校8 HDU-6143 Killer Names 排列组合&斯特灵数

来源:互联网 发布:丽水网络干部学院 编辑:程序博客网 时间:2024/06/13 21:49

原题链接:
HDU-6143

大意:
名字由两部分组成,等长的 first name 和 last name 。现在给出 first 的长度 n,和可用字母数 m 。要求first name 用过的字母 last name 不能再用,(即两者没有交集),求总共有多少种构造方式。

Limits:
n、m : 2000

思路:
比赛的时候不知道其他人怎么过的,好像相当一部分不是用的组合数过的…标程用的容斥原理。拓展了知识…
这里用了 斯特灵数 ,原题的模型等价于 n 个不同球 放进 m 个不同盒子,盒子必须用完。 从 0 到 m 枚举 m 即为答案。
预处理斯特灵数和组合数。

详情见代码。
斯特灵数的性质比较奇妙,看起来有点像杨辉三角,构造方式是

S(N, K) = S(N-1, K-1) + K * S(N-1, K)
第 N 行的个数为 N
两头为1

借来的图
这里写图片描述

直接给出两个公式,网上资料很多:

球不同,盒同,盒可以为空 S(N, 1) + S(N, 2) + S(N, 3) + … + S(N, M)球不同,盒不同,盒不可以为空 M! * S(N, M)

具体实现:

#include <bits/stdc++.h>using namespace std;typedef long long ll;#define mem(s,t) memset(s,t,sizeof(s))#define D(v) cout<<#v<<" "<<v<<endl#define inf 0x3f3f3f3f#define pb push_back//#define LOCALinline void read(ll &x){    x=0;char p=getchar();    while(!(p<='9'&&p>='0'))p=getchar();    while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();}ll f[2005][2005],C[2005][2005];ll calc[2005];//阶乘const ll p=1e9+7;void init(){    calc[1]=calc[0]=1;    for(int i=1;i<=2000;i++){        calc[i]=calc[i-1]*i%p;        for(int j=1;j<=i;j++){            if(j==1 || j==i){f[i][j]=1;}            else{                f[i][j]=(j*f[i-1][j]%p+f[i-1][j-1])%p;            }        }    }    C[0][0]=C[0][1]=1;    for(int i=0;i<=2003;i++){        for(int j=0;j<=i;j++){            if(j==0 || j==i) C[i][j]=1;            else C[i][j]=C[i-1][j-1]+C[i-1][j];            C[i][j]%=p;        }    }}ll solve(ll n,ll m){    if(m==1) return 1;    ll ret=calc[m];    ret=ret*f[n][m]%p;    return ret;}int main() {    ll t;    init();    read(t);    while(t--){        ll n,m;        read(n);read(m);        ll ans=0;        for(ll i=1;i<=n&&i<=m;i++){            for(ll j=1;i+j<=m && j<=n;j++){                ans+=((C[m][i]*C[m-i][j]%p)*solve(n,i)%p)*solve(n,j)%p;                ans%=p;            }        }        printf("%lld\n",ans);    }}

参考资料:
友链博客
http://azaleasays.com/2011/12/16/combinatorics-n-balls-in-m-boxes/
维基百科
https://zh.wikipedia.org/wiki/%E6%96%AF%E7%89%B9%E7%81%B5%E6%95%B0
各种全面的组合数用法,反正马了也不会看(
https://bbs.qzzn.com/thread-10867122-1-1.html

原创粉丝点击