JZOJ 4872.集体照
\(\text{Problem}\)
一年一度的高考结束了,我校要拍集体照。本届毕业生共分 \(n\) 个班,每个班的人数为 \(A_i\)。这次拍集体照的要求非常奇怪:所有学生站一排,且相邻两个学生不能同班。现在,安排这次集体照的老师找到了你,想问问你一共有多少种方案。方案数可能很大,最终结果对 \(10^9+7\) 取模。
\(\text{Solution}\)
考虑 \(dp\),按班级做,插入人
设 \(f_{i,j}\) 表示做到第 \(i\) 个班,已经出现 \(j\) 对相邻
那么转移就是当前班分 \(k\) 组,选 \(t\) 组插到 \(j\) 个空中,使他们分离
\(\text{Code}\)
#include<cstdio>
#include<algorithm>
#define LL long long
#define re register
using namespace std;
const LL P = 1e9 + 7;
int n, a[55], sum[55];
LL fac[1505], C[1505][1505], f[55][1505];
inline void ADD(LL &x, LL y)
{
x += y;
if (x > P) x -= P;
}
int main()
{
freopen("photo.in", "r", stdin);
freopen("photo.out", "w", stdout);
scanf("%d", &n);
for(re int i = 1; i <= n; i++) scanf("%d", &a[i]), sum[i] = sum[i - 1] + a[i];
fac[0] = 1;
for(re int i = 1; i <= sum[n]; i++) fac[i] = fac[i - 1] * i % P;
for(re int i = 0; i <= sum[n]; i++) C[i][0] = 1;
for(re int i = 1; i <= sum[n]; i++)
for(re int j = 1; j <= i; j++) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % P;
f[1][a[1] - 1] = 1;
for(re int i = 2; i <= n; i++)
for(re int j = 0; j < sum[i - 1]; j++)
for(re int k = 1; k <= a[i]; k++)
for(re int t = 0; t <= k; t++)
ADD(f[i][j + a[i] - k - t], f[i - 1][j] * C[a[i] - 1][k - 1] % P * C[j][t] % P * C[sum[i - 1] + 1 - j][k - t] % P);
LL ans = f[n][0];
for(re int i = 1; i <= n; i++) ans = ans * fac[a[i]] % P;
printf("%lld\n", ans);
}
JZOJ 4872.集体照的更多相关文章
- PAT-乙级-1055. 集体照 (25)
1055. 集体照 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 拍集体照时队形很重要,这里对给定的N ...
- bzoj 4872: [Shoi2017]分手是祝愿 [期望DP]
4872: [Shoi2017]分手是祝愿 题意:n个灯开关游戏,按i后i的约数都改变状态.随机选择一个灯,如果当前最优策略\(\le k\)直接用最优策略.问期望步数\(\cdot n! \mod ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]5478.【NOIP2017提高组正式赛】列队
Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校 ...
- [jzoj]1115.【HNOI2008】GT考试
Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...
- [jzoj]2538.【NOIP2009TG】Hankson 的趣味题
Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...
- [jzoj]4216.【NOIP2015模拟9.12】平方和
Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...
- [jzoj]2938.【NOIP2012模拟8.9】分割田地
Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...
随机推荐
- day10 Test
public class Test{ public static void main(String[] args){ fun1(); } /**1. * 有2个数组,第一个数组内容为:[黑龙江省,浙江 ...
- TornadoFx的TableView组件使用
原文: TornadoFx的TableView组件使用 - Stars-One的杂货小窝 最近慢慢地接触了JavaFx中的TableView的使用,记下笔记总结 使用 1.基本使用 TornadoFx ...
- K8S 核心组件 kubelet 与 kube-proxy 分析
kubelet kubelet 进程用于处理master 下发的任务, 管理pod 中的容器, 注册 自身所在的节点. 节点管理 启动参数说明 --register-node #如果设置为true 则 ...
- 关于解决pip安装python第三方库超时的问题
直接换源下载 1. 设置超时时间,安装txt 文件内安装包 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-time ...
- npm Error: Cannot find module 'are-we-there-yet'
npm 损坏了,are-we-there-yet是npm所依赖的npmlog依赖的一个包,重新安装npm即可 踩坑,直接安装还是报错,不管执行哪个命令都是报下面这个错 网上百度了很多,有的说把node ...
- (已转)C++知识图谱
- go_xml_learn
结构体转换为xml: type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"nam ...
- [OpenCV实战]29 使用OpenCV实现红眼自动去除
目录 1 红眼消除 1.1 眼部检测 1.2 红眼遮掩 1.3 清除瞳孔掩模空洞 1.4 红眼修复 2 结果与完整代码 2.1 结果 2.2 代码 3 参考 在本教程中,我们将学习如何完全自动地从照片 ...
- 使用Prometheus监控docker compose方式部署的ES
需求 收集 ES 的指标, 并进行展示和告警; 现状 ES 通过 docker compose 安装 所在环境的 K8S 集群有 Prometheus 和 AlertManager 及 Grafana ...
- [C++标准模板库:自修教程与参考手册]关于auto_ptr
什么是auto_ptr指针 auto_ptr是这样一种指针:它是"它所指的对象"的拥有者,所以,当身为对象拥有者的auto_ptr指针被摧毁时,该对象也会被摧毁,auto_ptr要 ...