2729: [HNOI2012]排队

本文探讨了一道组合计数问题:某中学有n名男同学,m名女同学及两名老师,在特定条件下(任意两名女同学不相邻,两名老师也不相邻)排队参加体检的所有可能排法数量。通过Python实现,采用数学中的排列组合方法进行计算。

题目链接

题目大意:某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)

题解:丧病的分类讨论,这一定是高中数学……
题解
python大法好

我的收获:22222

# n!(A(n+1,2)*A(n+3,m)+2*(n+1)*A(n+2,m-1)*m)
 
def mul(x, y):
    re = 1
    for i in range (x, y + 1):
        re = re * i
    return re
 
n, m = raw_input().split()
n = int(n); m = int(m)
#print(mul(1,n)*((n+1)*n*mul(n+3-m+1,n+3)+2*(n+1)*m*mul(n+2-m+2,n+2)))
print(mul(1,n+1)*mul(n+4-m,n+2)*(n*(n+3)+2*m))
# P3205 [HNOI2010] 合唱队 ## 题目描述 为了在即将到来的晚会上有更好的演出效果,作为 AAA 合唱队负责人的小 A 需要将合唱队的人根据他们的身高排出一个队形。假定合唱队一共 $n$ 个人,第 $i$ 个人的身高为 $h_i$ 米($1000 \le h_i \le 2000$),并已知任何两个人的身高都不同。假定最终排出的队形是 $A$ 个人站成一排,为了简化问题,小 A 想出了如下排队的方式:他让所有的人先按任意顺序站成一个初始队形,然后从左到右按以下原则依次将每个人插入最终排出的队形中: - 第一个人直接插入空的当前队形中。 - 对从第二个人开始的每个人,如果他比前面那个人高($h$ 较大),那么将他插入当前队形的最右边。如果他比前面那个人矮($h$ 较小),那么将他插入当前队形的最左边。 当 $n$ 个人全部插入当前队形后便获得最终排出的队形。 例如,有 $6$ 个人站成一个初始队形,身高依次为 $1850, 1900, 1700, 1650, 1800, 1750$, 那么小 A 会按以下步骤获得最终排出的队形: - $1850$。 - $1850, 1900$,因为 $1900 > 1850$。 - $1700, 1850, 1900$,因为 $1700 < 1900$。 - $1650, 1700, 1850, 1900$,因为 $1650 < 1700$。 - $1650, 1700, 1850, 1900, 1800$,因为 $1800 > 1650$。 - $1750, 1650, 1700, 1850, 1900, 1800$,因为 $1750 < 1800$。 因此,最终排出的队形是 $1750, 1650, 1700, 1850, 1900, 1800$。 小 A 心中有一个理想队形,他想知道多少种初始队形可以获得理想的队形。 请求出答案对 $19650827$ 取模的值。 ## 输入格式 第一行一个整数 $n$。 第二行 $n$ 个整数,表示小 A 心中的理想队形。 ## 输出格式 输出一行一个整数,表示答案 $\bmod 19650827$ 的值。 ## 输入输出样例 #1 ### 输入 #1 ``` 4 1701 1702 1703 1704 ``` ### 输出 #1 ``` 8 ``` ## 说明/提示 对于 $30\%$ 的数据,$n \le 100$。 对于 $100\%$ 的数据,$n \le 1000$,$1000 \le h_i \le 2000$。 请用c++ DP写,详细讲解转移方程
最新发布
08-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值