题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=562

题意:

求给每个节点的度数允许的最大值,让你求k个节点能组成的不同的生成树个数。

题解:

对于n个节点形成的一颗生成树,有一个与之唯一对应的大小为n-2的prufer数列。

并且一个节点的度数减一为它出现在prufer数列中的次数。

那么我们求生成树的个数可以转化为求prufer数列的可重集排列,而这个可以用dp来做。

dp[i][j][k]表示处理到第i个节点,已经用了j个节点,且可重集大小为k的排列组合数。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; const int maxn = ;
const int mod = 1e9 + ;
typedef long long LL; int n;
LL dp[maxn][maxn][maxn];
int arr[maxn]; LL C[maxn][maxn];
void pre() {
C[][] = ;
for (int i = ; i < maxn; i++) {
C[i][] = ;
for (int j = ; j <= i; j++) {
C[i][j] = (C[i - ][j - ] + C[i - ][j]) % mod;
}
}
} void init() {
memset(dp, , sizeof(dp));
} int main() {
pre();
int tc;
scanf("%d", &tc);
while (tc--) {
init();
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", &arr[i]);
}
dp[][][] = ;
for (int i = ; i <= n; i++) {
for (int j = ; j <= i; j++) {
for (int k = ; k <= n - ; k++) {
//不用第i+1个数
dp[i + ][j][k] = (dp[i + ][j][k] + dp[i][j][k]) % mod;
//用第i+1个数
for (int l = ; l <= arr[i + ] && l - + k <= n - ; l++) {
dp[i + ][j + ][k + l - ] = (dp[i + ][j + ][k + l - ] + C[k + l - ][l - ] * dp[i][j][k]) % mod;
}
}
}
}
printf("%d", n);
for (int i = ; i <= n; i++) printf(" %lld", dp[n][i][i - ]);
printf("\n");
}
return ;
}

HDU 5629 Clarke and tree dp+prufer序列的更多相关文章

  1. HDU5629:Clarke and tree(DP,Prufer)

    Description Input Output Sample Input Sample Output Solution 题意:给你$n$个点,还有每个点的度数,问你任选$i(1\leq i \leq ...

  2. 【CF917D】Stranger Trees 树形DP+Prufer序列

    [CF917D]Stranger Trees 题意:给你一棵n个点的树,对于k=1...n,问你有多少有标号的n个点的树,与给出的树有恰好k条边相同? $n\le 100$ 题解:我们先考虑容斥,求出 ...

  3. hdu 5464 Clarke and problem dp

    Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...

  4. HDU 5628 Clarke and math dp+数学

    Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...

  5. hdu 1243 反恐训练营(dp 最大公共子序列变形)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1243 d[i][j] 代表第i 个字符与第 j 个字符的最大的得分.,, 最大公共子序列变形 #inclu ...

  6. hdu 1054 Strategic Game(tree dp)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. HDU 5628 Clarke and math——卷积,dp,组合

    HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...

  8. 5.13 省选模拟赛 优雅的绽放吧,墨染樱花 多项式 prufer序列 计数 dp

    LINK:优雅的绽放吧,墨染樱花 当时考完只会50分的做法 最近做了某道题受到启发 故会做这道题目了.(末尾附30分 50分 100分code 看到度数容易想到prufer序列 考虑dp统计方案数. ...

  9. [2021.4.9多校省选模拟35]隐形斗篷 (prufer序列,背包DP)

    题面 我编不下去了! 给出 n n n 个点,第 i i i 个点的度数限制为 a i a_i ai​,现在需要选出 x x x 个点构成一颗树,要求这 x x x 个点中每个点的度数不超过这个点的 ...

随机推荐

  1. Part 5 Select statement in sql server

    Select specific or all columns select * from 表名 select * from Student select 列名,列名... from 表名 select ...

  2. 在sql-server上建立mysql链接库

    EXEC sp_addlinkedserver @server = N'RESUME_MYSQL_CONN', @srvproduct=N'MySQL ODBC 5.1 Driver', @provi ...

  3. SQL IDENTITY(int,1,1) 用法

    select IDENTITY(int,1,1) as SortID from tb_order 仅当 SELECT 语句中有 INTO 子句时,才能使用 IDENTITY 函数. select ID ...

  4. Mac下配置cocos2dx2.2.6的Android环境

    最近在学习cocos2dx在MAC上如何打包apk,今天先把安装JDK和ANT的过程记来. 首先,打开终端,输入”java -version” 点击回车后,出现如下提示: 我们的MAC上并没有安装过J ...

  5. python基础:三元运算

    学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 1 2 3 4 5 6 7 8 # 普通条件语句 if 1 == 1:     name = 'wupeiqi' els ...

  6. 【转载】#273 - Parameter Modifier Summary

    Here's a summary of the different parameter modifiers and how the behavior changes for each, when us ...

  7. tar 「解/壓」 包

    1.tar: short read tar壓縮包文件發生了損壞,或者说不完整. 最近,在寫下載程序的時候,發生了這個問題.初步猜測文件寫完沒有關閉,沒有寫完.

  8. sicily 1027 MJ, Nowhere to Hide 字符串匹配与排序

    1027. MJ, Nowhere to Hide Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description On BBS, th ...

  9. mysql安装过程中出现的错误问题解决方案

    最近在学Django,因为与数据库相关,所以我下载并安装了MySQL,安装的过程真的是一把辛酸泪啊.安装过后,查看是否可以使用,出现了cann't connect to mysql server这个错 ...

  10. 8.samba server与client配置

    server端 1.安装samba:yum install -y samba\* 增加samba用户: useradd smb用户名               smbpasswd -a smb用户名 ...