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$然后相乘 这样的子树 ...
随机推荐
- -webkit-box-orient:vertical 编译报错之autoprefixer问题
由于各大浏览器的兼容问题,autoprefixer 插件 就可以帮我们自动补齐前缀.它和 less.scss 这样的预处理器不同,它属于后置处理器. 预处理器:在打包之前进行处理 后置处理器:在代码打 ...
- ajax 跨域请求jsonp
最近一段时间为这个事情走了不少弯路,现将成功经验分享,避免后来人再绕远路,不过也是第一次使用中间有什么问题大家可以留言探讨. ajax的跨域请求jsonp主要运用于不同系统的交互,一个系统想通过该种方 ...
- Kubernetes专栏 | 安装部署(一)
--随着云原生概念的普及,许多企业的业务纷纷上云,为了追求可靠性,稳定性,和弹性伸缩,提升资源利用率等需求.Kubernetes这个谷歌开源的容器编排平台已日益流行,被大家熟知和使用. 通常来说,Ku ...
- 使用Typora
Markdown学习 标题:#+空格+名称 二级标题 二级标题:##+空格+名称 三级标题 几级标题以此类推,最多支持到六级标题 字体 Hello,world! 变粗体:一句话的前后加上两个** 变斜 ...
- 2020最新Java面试题及答案(带完整目录).pdf
一.JVM 二.Java集合 三.Java多线程并发 四.Java基础 五.Spring原理 六.微服务 七.Netty与RPC 八.网络 九.日志 十.RabbitMQ 十一.MongoDB 十二. ...
- 【Java EE】Day07 HTML
一.WEB概念 1.软件架构 C/S:安卓.QQ.迅雷,开发两端 B/S 2.资源分类 静态资源:浏览器内置解析引擎 HTML:展示内容 CSS:页面布局 JavaScript:控制页面元素,产生动态 ...
- vulnhub靶场之DIGITALWORLD.LOCAL: FALL
准备: 攻击机:虚拟机kali.本机win10. 靶机:digitalworld.local: FALL,下载地址:https://download.vulnhub.com/digitalworld/ ...
- 快速入门JavaScript编程语言
目录 JS简介 JS基础 1.注释语法 2.引入js的多种方式 3.结束符号 变量与常量 let和var的区别 申明常量 const 严格模式 use strict 基本数据类型 1.数值类型(Num ...
- CGI、WSGI、uWSGI、ASGI……
在学习 Python Web 开发时候,可能会遇到诸如 uwsgi.wsgi 等名词,下面通过梳理总结,探究它们之间的关系. CGI CGI(Common Gateway Interface)通用网关 ...
- python中使用pip 安装第三方库报错归类及解决方式
1. 离线安装virtualenv报错,安装命令:python setup.py install 解决方式:升级setuptools 2. 安装第三方库时安装失败,安装命令:pip install ...