HDU5629:Clarke and tree(DP,Prufer)
Description

Input

Output

Sample Input

Sample Output

Solution
题意:给你$n$个点,还有每个点的度数,问你任选$i(1\leq i \leq n)$个点构成树的方案数。
这种统计生成树的题,很容易想到用$prufer$序列搞。
$prufer$序列有一个很重要的性质,一个度数为$d$的点会在$prufer$序列里出现$d-1$次。
那么我们设$f[i][j][k]$表示$DP$完前$i$个点,选了其中的$j$个点,当前$prufer$序列长度为$k$。
不选:$f[i+1][j][k]+=f[i][j][k]$。
当前度数为$d+1$,也就是要把$d$个当前点插入到$prufer$序列里:$f[i+1][j+1][k+d]+=f[i][j][k]\times C[k+d][d]$。
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#define N (109)
#define MOD (1000000007)
using namespace std; int T,n,a[N],f[N][N][N],C[N][N]; void Preprocess()
{
C[][]=;
for (int i=; i<=; ++i)
for (int j=; j<=i; ++j)
{
if (j) (C[i][j]+=C[i-][j-])%=MOD;
(C[i][j]+=C[i-][j])%=MOD;
}
} int main()
{
Preprocess();
scanf("%d",&T);
while (T--)
{
memset(f,,sizeof(f));
scanf("%d",&n);
for (int i=; i<=n; ++i) scanf("%d",&a[i]);
f[][][]=;
for (int i=; i<=n; ++i)
for (int j=; j<=i; ++j)
for (int k=; k<=n-; ++k)
{
(f[i+][j][k]+=f[i][j][k])%=MOD;
for (int d=; d<=a[i+]-; ++d)
(f[i+][j+][k+d]+=1ll*f[i][j][k]*C[k+d][d]%MOD)%=MOD;
}
printf("%d",n);
for (int i=; i<=n; ++i) printf(" %d",f[n][i][i-]); puts("");
}
}
HDU5629:Clarke and tree(DP,Prufer)的更多相关文章
- HDU 5629 Clarke and tree dp+prufer序列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=562 题意: 求给每个节点的度数允许的最大值,让你求k个节点能组成的不同的生成树个数. 题解: 对于n ...
- [hdu5629]Clarke and tree
首先由一个神奇的序列叫做Purfer序列,他可以表示一棵树,且每个节点出现此时为度数-1(因此总长为n-2). 然后dp,用f[i][j][k]表示用前i个点中的j个点构成了一个长度为k的Purfer ...
- 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序
[题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...
- 96. Unique Binary Search Trees (Tree; DP)
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- HDU 4359——Easy Tree DP?——————【dp+组合计数】
Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- TYOI Day1 travel:Tree dp【处理重复走边】
题意: 给你一棵树,n个节点,每条边有长度. 然后有q组询问(u,k),每次问你:从节点u出发,走到某个节点的距离mod k的最大值. 题解: 对于无根树上的dp,一般都是先转成以1为根的有根树,然后 ...
- HDU 4359 Easy Tree DP?
Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- hdu 5464 Clarke and problem dp
Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...
- Codeforces 442D Adam and Tree dp (看题解)
Adam and Tree 感觉非常巧妙的一题.. 如果对于一个已经建立完成的树, 那么我们可以用dp[ i ]表示染完 i 这棵子树, 并给从fa[ i ] -> i的条边也染色的最少颜色数. ...
随机推荐
- js 中格式化时间
在js中常常要求对时间的输出格式进行格式化,比如 2017-01-01 10:10,比较麻烦的是月,日,小时,分.它们的格式一般要求两位,如果小于10的话需要在前边补0,当然这算不上什么问题,可以通过 ...
- java文件下载以及中文乱码解决
在客户端下载文件时替换下载文件的名称,但是当名称是中文时浏览器会出现乱码,解决代码如下: public org.springframework.http.ResponseEntity<Input ...
- Java Switch支持的类型问题
常见支持类型为int,byte,short,char及枚举类型.以上是JDK1.6以前的版本.JDK1.7时,又增加了String. 参考资料:1.java switch支持的数据类型 2.java中 ...
- MongoDB的web可视化管理工具
现在许多应用都使用MongoDB存储大量的业务数据,MongoDB基于文档式的存储,在大数据行业的应用还是很普遍的.MongoDB的客户端工具也很多,基于web的却不多,国产的就更少了,下面介绍的是一 ...
- django-全文检索
全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理 需要的第三方库: haystack:django的一个包,可以方便地对model里面的内容进行索引.搜索,设计为 ...
- 初识DOM(文档对象模型)
什么是DOM 什么叫做DOM呢? • DOM的全称是Document Object Model 文档对象模型,DOM定义了表示和修改文档所需的对象.这些对象的行为和属性以及这些对象之间的关系. • D ...
- vue-scroller记录滚动位置
问题描述: 列表页进入详情页,或者tab页切换,然后再返回列表页,希望能切换到之前滚动位置 解决问题思路: 切换到其他页面前记录位置,返回列表页的时候返回位置.这就需要借助vue-router的bef ...
- HTTP 协议入门-笔记
原文参考http://mp.weixin.qq.com/s/czx0AHaItrJ-c49XDboIUg HTTP是基于TCP/IP协议的应用层协议,规定了客户端和服务端之间的通信格式,默认使用80 ...
- nginx www解析失败问题解决
nginx www解析失败: nginx代理IIS下域名时 xxxx.xxx可以解析 但www.xxxx.xxx解析失败 IIS增加ip解析:配置下127.0.0.1就可以解析了.
- 【Java入门提高篇】Day20 Java容器类详解(三)List接口
今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...