首先想过n^3的组合方法,即f(i,j,k)=f(i-1,j,k)*(i-2)+f(i-1,j-1,k)+f(i-1,j,k-1),肯定搞不定

然后想了好久没有效果,就去逛大神博客了,结果发现需要用到第一类stirling数

第一类stirling数S(n,m)表示的是n个数排成m个非空环排列的数目

每个环排列中必然有一个是可以看见的,然后再对这m个环求组合数

不难理解,但是很难想到

#include <stdio.h>
#include <string.h>
#define mod 1000000007
#define LL long long int C[2050][2050];
LL S[2050][2050]; void init()
{
memset(C,0,sizeof(C));
memset(S,0,sizeof(S));
C[0][0]=1;
for(int i=1;i<=2000;i++)
{
C[i][0]=1;
for(int j=1;j<=2000;j++)
{
C[i][j]=C[i-1][j-1]+C[i-1][j];
C[i][j]%=mod;
}
}
for(int i=1;i<=2000;i++)
S[i][i]=1;
for(int i=1;i<=2000;i++)
S[i][0]=0;
for(int i=1;i<=2000;i++)
{
for(int j=1;j<i;j++)
{
S[i][j]=(i-1)*S[i-1][j]+S[i-1][j-1];
S[i][j]%=mod;
}
}
} int main()
{
int T,n,f,b;
init();
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&f,&b);
LL ans=S[n-1][f+b-2]*C[f+b-2][f-1];
printf("%I64d\n",ans%mod);
}
return 0;
}

HDU 4372 - Count the Buildings(组合计数)的更多相关文章

  1. HDU 4372 Count the Buildings

    Count the Buildings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  2. HDU 4372 Count the Buildings:第一类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...

  3. hdu 4372 Count the Buildings —— 思路+第一类斯特林数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4372 首先,最高的会被看见: 然后考虑剩下 \( x+y-2 \) 个被看见的,每个带了一群被它挡住的楼, ...

  4. HDU 4372 Count the Buildings [第一类斯特林数]

    有n(<=2000)栋楼排成一排,高度恰好是1至n且两两不同.现在从左侧看能看到f栋,从右边看能看到b栋,问有多少种可能方案. T组数据, (T<=100000) 自己只想出了用DP搞 发 ...

  5. HDU 4372 Count the Buildings——第一类斯特林数

    题目大意:n幢楼,从左边能看见f幢楼,右边能看见b幢楼 楼高是1~n的排列. 问楼的可能情况 把握看到楼的本质! 最高的一定能看见! 计数问题要向组合数学或者dp靠拢.但是这个题询问又很多,难以dp ...

  6. hdu 4372 Count the Buildings 轮换斯特林数

    题目大意 n栋楼有n个不同的高度 现在限制从前面看有F个点,后面看有B个点 分析 最高那栋楼哪都可以看到 剩下的可以最高那栋楼前面分出F-1个组 后面分出B-1个组 每个组的权值定义为组内最高楼的高度 ...

  7. HDU 4372 Count the Buildings 组合数学

    题意:有n个点上可能有楼房,从前面可以看到x栋楼,从后面可以看到y栋,问楼的位置有多少种可能. 印象中好像做过这个题,

  8. HDU.4903.The only survival(组合 计数)

    题目链接 惊了 \(Description\) 给定\(n,k,L\),表示,有一张\(n\)个点的无向完全图,每条边的边权在\([1,L]\)之间.求有多少张无向完全图满足,\(1\)到\(n\)的 ...

  9. HDU 5901 Count primes 大素数计数

    题意:计算1~N间素数的个数(N<=1e11) 题解:题目要求很简单,作为论文题,模板有两种 \(O(n^\frac{3}{4} )\),另一种lehmer\(O(n^\frac{2}{3})\ ...

随机推荐

  1. 【Hibernate3.3复习知识点二】 - 配置hibernate环境(annotations)

    配置文件hibernate.cfg.xml中引入:<mapping class="com.bjsxt.hibernate.Teacher"/> <hibernat ...

  2. selenium c# 的注意事项

    http://chromedriver.storage.googleapis.com/index.html chromedriver的下载地址http://selenium-release.stora ...

  3. CentOS7.5安装网易云音乐

    CentOS7中一直没有一个像样的音乐播放器,网易云音乐与深度科技团队在半年前就启动了“网易云音乐Linux版“, 但是只提供了Ubuntu(14.04&16.04)和deepin15版本,并 ...

  4. ps aux 状态介绍

    ps aux 输出 参数 含义 详解 运行 ps aux 的到如下信息:   ps auxUSER    PID   %CPU %MEM VSZ   RSS TTY    STAT   START T ...

  5. 用python正则表达式提取网页的url

    import re import urllib url="http://www.itokit.com" s=urllib.urlopen(url).read() ss=s.repl ...

  6. 转:攻击JavaWeb应用[8]-后门篇

    转:http://static.hx99.net/static/drops/tips-662.html 攻击JavaWeb应用[8]-后门篇 园长 · 2013/10/11 19:19 0x00 背景 ...

  7. 如何去除windows下文本的^M

    使用vi编辑,输入命令: :%s/^M/\r/g 用来把^M换成回车 注意的是^M要使用CTRL-V CTRL-M生成,而不是直接键入^M

  8. FZU - 1492(Problem 1492 地震预测)

    怀特先生是一名研究地震的科学家,最近他发现如果知道某一段时间内的地壳震动能量采样的最小波动值之和,可以有效地预测大地震的发生. 假设已知一段时间的n次地壳震动能量的采样值为a1,a2,-an,那么第i ...

  9. Struts2中的设计模式----ThreadLocal模式

    http://www.cnblogs.com/gw811/archive/2012/09/07/2675105.html 设计模式(Design pattern):是经过程序员反复实践后形成的一套代码 ...

  10. 【虚树】hdu6161 Big binary tree

    题意:一棵n个结点的完全二叉树,初始i号结点的权值为i.有两种操作:单点修改:询问经过某个结点的路径中,权值和最大的路径的权值和是多少. 修改的时候,暴力修改到根节点的路径上的点的f(x)即可. 跟虚 ...