首页 > 其他分享 >HDU4372(第一类斯特林数)

HDU4372(第一类斯特林数)

时间:2023-05-31 23:34:54浏览次数:52  
标签:每组 斯特林 左边 HDU4372 元素 排列 第一类 最高 LL


题目:Count the Buildings



题意:N座高楼,高度均不同且为1~N中的数,从前向后看能看到F个,从后向前看能看到B个,问有多少种可能的排列数。

0 < N, F, B <= 2000


首先我们知道一个结论:n的环排列的个数与n-1个元素的排列的个数相等,因为P(n,n)/n=(n-1)!。

可以肯定,无论从最左边还是从最右边看,最高的那个楼一定是可以看到的.

假设最高的楼的位置固定,最高楼的编号为n,那么我们为了满足条件,可以在楼n的左边分x-1组,右边分y-1组,且用每

组最高的那个元素代表这一组,那么楼n的左边,从左到右,组与组之间最高的元素一定是单调递增的,且每组中的最高元

素一定排在该组的最左边,每组中的其它元素可以任意排列(相当于这个组中所有元素的环排列)。右边反之亦然。

然后,可以这样考虑这个问题,最高的那个楼左边一定有x-1个组,右边一定有y-1个组,且每组是一个环排列,这就引出

了第一类Stirling数(个人分成组,每组内再按特定顺序围圈的分组方法的数目)。


我们可以先把n-1个元素分成x-1+y-1组,然后每组内部做环排列。再在所有组中选取x-1组放到楼n的左边。所以答案是

ans(n, f, b) = C[f + b - 2][f - 1] * S[n - 1][f + b - 2];




#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
typedef long long LL;

const int N=2005;
const LL MOD=1000000007;

LL C[N][N];
LL S[N][N];

void Init()
{
    int i,j;
    for(i=0;i<N;i++)
    {
        C[i][0]=1;
        C[i][i]=1;
        S[i][0]=0;
        S[i][i]=1;
        for(j=1;j<i;j++)
        {
            C[i][j]=(C[i-1][j]%MOD+C[i-1][j-1]%MOD)%MOD;
            S[i][j]=((i-1)%MOD*S[i-1][j]%MOD+S[i-1][j-1]%MOD);
        }
    }
}

int main()
{
    LL t,n,f,b,ans;
    Init();
    scanf("%I64d",&t);
    while(t--)
    {
        scanf("%I64d%I64d%I64d",&n,&f,&b);
        ans=C[f+b-2][f-1]%MOD*S[n-1][f+b-2]%MOD;
        printf("%I64d\n",ans);
    }
    return 0;
}




标签:每组,斯特林,左边,HDU4372,元素,排列,第一类,最高,LL
From: https://blog.51cto.com/u_16146153/6391063

相关文章

  • 函数名的作用:函数也是第一类对象
    函数名的作用:函数也是第一类对象​ 1.函数名就是函数的内存地址2.函数名可以作为变量3.函数名可以作为函数的参数4.函数名还可以当做函数的返回值5.函数名可以作为容器类型的元素(列表中的一个元素)globals()locals()​ globals()#作用是返回全局变......
  • 【学习笔记】斯特林数
    听说第一类斯特林数啥用没有,先咕咕咕。第二类斯特林数是将\(n\)个有标号球放入\(m\)个无区别盒子的方案数(盒子不可为空)递推式:\[\begin{bmatrix}n\\m\end{bmatrix}=\begin{bmatrix}n-1\\m-1\end{bmatrix}+m\times\begin{bmatrix}n-1\\m\end{bmatrix}\]单独成一盒和......
  • 斯特林数,上升幂,下降幂学习笔记
    斯特林,上升幂,下降幂,普通幂的定义第二类斯特林数n\(n\brace0\)\(n\brace1\)\(n\brace2\)\(n\brace3\)\(n\brace4\)\(n\brace5\)\(n\brace6\)\(n\brace7\)\(n\brace8\)\(n\brace9\)0\(1\)\(0\)\(0\)\(0\)\(0\)\(0\)......
  • 斯特林数
    斯特林数这一部分是我在阅读《具体数学》时做的一些类似于摘抄的东西。不过补上了很多没有给出的证明。第二类斯特林数我们记\(\begin{Bmatrix}n\\k\end{Bmatrix}\)表示把\(n\)个物品分为\(k\)个非空集合的方案数,读作“\(n\)集合\(k\)”。称为“第二类斯特林数”或“......
  • 精确率和召回率 - 查准率和查全率 - 第一类错误与第二类错误
    召回率(RecallRate,也叫查全率)是检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率;精确率(PrecisionRate,也叫查准率)是检索出的相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率。概率论中的第一类错误和第二类错误:第一类错误:原假设是正......
  • 浅析排列组合、斯特林数、贝尔数、二项式定理与推论及其反演、子集反演、广义容斥
    浅析排列组合、斯特林数、贝尔数、二项式定理与推论及其反演、子集反演、广义容斥目录浅析排列组合、斯特林数、贝尔数、二项式定理与推论及其反演、子集反演、广义容斥更......
  • 浅析排列组合、斯特林数、贝尔数、二项式定理与推论及其反演、子集反演、广义容斥
    浅析排列组合、斯特林数、贝尔数、二项式定理与推论及其反演、子集反演、广义容斥目录浅析排列组合、斯特林数、贝尔数、二项式定理与推论及其反演、子集反演、广义容斥更......
  • 斯特林数学习笔记
    斯特林数学习笔记注:本篇只为作者自己看懂,方便以后复习。注意:如无特殊说明,以下公式的范围皆为\(n\ge0\)且\(n\)为整数。因为我太菜啦,所以很多东西都只有最浅显的部分......
  • 斯特林数对普通幂、阶乘幂的转化和斯特林反演公式的推导
    PS:首先%周克字号过小时无法显示上升幂下降幂记得开SVG渲染\(n!=\sum_{k=0}^n\begin{bmatrix}n\\k\end{bmatrix}\\\)证明:一种排列对应一种置换\(m^n=\sum_{k=0}^m\begi......
  • 斯特林数
    斯特林数斯特林数概述在数学中,斯特林数(Stirling)用于解决各种数学分析和组合数学问题,斯特林数是两组不同的数,均是18世纪由詹姆斯·斯特林引入并以其命名,以第一类斯......