多校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
阅读全文
0 0
- 多校8 HDU-6143 Killer Names 排列组合&斯特灵数
- HDU 6143 Killer Names【容斥定理】【排列组合】
- 2017多校八 1011题 hdu 6143 Killer Names 排列组合
- HDU 2017 多校联合训练赛8 1011 6143 Killer Names 排列组合
- HDU 6143 Killer Names
- hdu--6143--Killer Names
- hdu 6143 Killer Names
- hdu 6143 Killer Names
- HDU 6143 Killer Names
- hdu 6143 Killer Names
- HDU 6143 Killer Names
- HDU --6143 Killer Names
- Hdu 6143 Killer Names【思维+斯特灵数】
- hdu 6143 Killer Names dp
- Killer Names(hdu 6143)
- Killer Names(HDU 6143)
- Killer Names 2017 多校 8
- HDU 6143 Killer Names [第二类斯特林数]
- python 数据结构零 之 python类
- url编码的字符对应表
- PHP入门(第六弹:常量)
- Java的notify,wait,notifyAll方法使用介绍
- 任务布置之数据库相关
- 多校8 HDU-6143 Killer Names 排列组合&斯特灵数
- 基于数组的shell脚本编写
- 亚像元定位 硬分类 软分类
- 九度OJ:1185
- 计算机系统知识2
- hibernate注解,jpa注解根据类生成表
- JavaScript & jQuery交互式Web前端开发pdf
- 用wget下载文件
- Android如何搭建FTP服务器