JZOJ 5033. 【NOI2017模拟3.28】A
A
题面

思路
非常抽象地让你构造树,很容易想到 \(prufer\) 序列(如果你会的话)
说明一下:\(prufer\) 序列可以唯一确定一颗树的形态
若树的节点个数为 \(n\),那么 \(prufer\) 序列长度为 \(n-2\) ,且一个节点出现的个数为它的度数减一(不要问我为什么,因为 \(prufer\) 序列就是这样的)
那么我们就考虑 \(dp\) 了
设 \(f_{i,j,k}\) 表示考虑前 \(i\) 个数,选出 \(j\) 个数,当前 \(prufer\) 序列长度为 \(k\)。
为何要设 \(k\) ?因为一个节点在 \(prufer\) 序列中出现可能不止一次
考虑转移: \(f_{i,j,k} = \sum_{l=1}^{\min(a_i-1,k)}\binom{k}{l}f_{i-1,j-1,k-l}+f_{i-1,j,k}\)
\(f_{i-1,j,k}\) 意思是第 \(i\) 位不选
选的话,\(l\) 枚举选多少个,\(\binom{k}{l}\) 表示选了之后放到序列中的方案数
那么答案如何计算?
\(ans_x=\sum_{j=1}^x\binom{n-j}{x-j}f_{n,j,x-2}\)
意思是考虑 \(prufer\) 序列中数的种数,用 \(j\) 个数凑出长为 \(x-2\) 的序列。
因为叶子节点不会出现在序列中,所以我们再从剩下 \(n-j\) 个数中选出还差的 \(x-j\) 个数
\(Code\)
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long LL;
const int N = 55;
const LL P = 1e9 + 7;
LL f[N][N][N] , fac[N];
int a[N] , n , T;
inline LL fpow(LL x , LL y)
{
LL res = 1;
while (y)
{
if (y & 1) res = res * x % P;
y >>= 1 , x = x * x % P;
}
return res;
}
inline LL C(int n , int m){return fac[n] * fpow(fac[m] * fac[n - m] % P , P - 2) % P;}
int main()
{
freopen("a.in" , "r" , stdin);
freopen("a.out" , "w" , stdout);
fac[0] = 1;
for(register int i = 1; i <= 52; i++) fac[i] = (i * 1LL * fac[i - 1]) % P;
scanf("%d" , &T);
while (T--)
{
scanf("%d" , &n);
for(register int i = 1; i <= n; i++) scanf("%d" , &a[i]);
memset(f , 0 , sizeof f);
f[0][0][0] = 1;
for(register int i = 1; i <= n; i++)
for(register int j = 0; j <= i; j++)
for(register int k = j; k <= n - 2; k++)
{
f[i][j][k] = f[i - 1][j][k];
if (j != 0) for(register int l = 1; l <= min(a[i] - 1 , k); l++)
f[i][j][k] = (f[i][j][k] + f[i - 1][j - 1][k - l] * C(k , l)) % P;
}
printf("%lld " , (LL)n);
LL ans;
for(register int x = 2; x <= n; x++)
{
ans = 0;
for(register int j = 0; j <= x; j++) ans = (ans + f[n][j][x - 2] * C(n - j , x - j) % P) % P;
printf("%lld " , ans);
}
printf("\n");
}
}
JZOJ 5033. 【NOI2017模拟3.28】A的更多相关文章
- JZOJ【NOIP2013模拟联考14】隐藏指令
JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...
- [jzoj 5178] [NOIP2017提高组模拟6.28] So many prefix? 解题报告(KMP+DP)
题目链接: https://jzoj.net/senior/#main/show/5178 题目: 题解: 我们定义$f[pos]$表示以位置pos为后缀的字符串对答案的贡献,答案就是$\sum_{i ...
- [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)
题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...
- NOIP模拟 6.28
NOIP模拟赛6.28 Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这 ...
- [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)
interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...
- [jzoj 6101] [GDOI2019模拟2019.4.2] Path 解题报告 (期望)
题目链接: https://jzoj.net/senior/#main/show/6101 题目: 题解: 设$f_i$表示从节点$i$到节点$n$的期望时间,$f_n=0$ 最优策略就是如果从$i, ...
- [jzoj 6093] [GDOI2019模拟2019.3.30] 星辰大海 解题报告 (半平面交)
题目链接: https://jzoj.net/senior/#contest/show/2686/2 题目: 题解: 说实话这题调试差不多花了我十小时,不过总算借着这道题大概了解了计算几何的基础知识 ...
- [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)
题目链接: https://jzoj.net/senior/#main/show/6080 题目: 题意: 给定$n,m,u,v$ 设$t_i=ui+v$ 求$\sum_{k_1+k_2+...+k_ ...
- [jzoj 6092] [GDOI2019模拟2019.3.30] 附耳而至 解题报告 (平面图转对偶图+最小割)
题目链接: https://jzoj.net/senior/#main/show/6092 题目: 知识点--平面图转对偶图 在求最小割的时候,我们可以把平面图转为对偶图,用最短路来求最小割,这样会比 ...
- [jzoj 6086] [GDOI2019模拟2019.3.26] 动态半平面交 解题报告 (set+线段树)
题目链接: https://jzoj.net/senior/#main/show/6086 题目: 题解: 一群数字的最小公倍数就是对它们质因数集合中的每个质因数的指数取$max$然后相乘 这样的子树 ...
随机推荐
- 【图像处理笔记】SIFT算法原理与源码分析
[图像处理笔记]总目录 0 引言 特征提取就是从图像中提取显著并且具有可区分性和可匹配性的点结构.常见的点结构一般为图像内容中的角点.交叉点.闭合区域中心点等具有一定物理结构的点,而提取点结构的一般思 ...
- 3A锂电池充电管理芯片PW4035
PW4052 是一颗适用于单节锂电池的.具有恒压/恒流充电模式的充电管理 IC.该芯片采用开关型的工作模式, 能够为单节锂电池提供快速. 高效且简单的充电管理解决方案. PW4052 采用三段式充电管 ...
- 预编译SQL为什么能够防止SQL注入
前言 之前我一个搞网络安全的朋友问了我一个的问题,为啥用 PreparedStatement 预编译的 SQL 就不会有被 SQL 注入的风险? 第一时间我联想到的是八股文中关于 Mybatis 的脚 ...
- 如何搭建自己的CICD流水线,实现自动编译部署功能?
之前使用过GitLab的CICD流水线,有多种环境,点击即可编译部署,十分的方便. 如何在个人项目中搭建自己的CICD流水线,实现push代码后自动编译并部署呢?这里使用到阿里云 云效DevOps,阿 ...
- 自研ORM框架 实现类似EF Core Include 拆分查询 支持自定义条件、排序、选择
Baozi, I'm Mr.Zhong I like to brush TikTok, I know that anchors like to call it that, haha!Recently, ...
- tomcat下找不到运行的程序文件
1.重新部署tomcat(删掉原有的tomcat) 2.更改部署路径
- [Linux Kernel 源码分析] 通过vconfig配置vlan的系统调用/驱动流程分析
By YuCloud (蓝天上的云℡ - 博客园 https://www.cnblogs.com/yucloud/) 转载请注明出处 vconfig源码分析 vlan/vconfig.c at mas ...
- CH579-Lwip-2.12移植
代码可以参考以下链接:https://gitee.com/maji19971221/lwip-routine Lwip可以在以下链接下载:http://download.savannah.gnu.or ...
- [常用工具] Caffe ssd常见问题集合
1 Check failed: a <= b <0 vs -1.19209e-007> 网上办法是注释掉 CHECK_LE(a, b),但是这样会出大问题.解决办法见2. 如果注释掉 ...
- mybatis-config.xml 说明
mybatis-config.xml 说明 文件结构 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息. 配置文档的顶层结构如下: configuration(配置) ...