HDU 5629 Clarke and tree dp+prufer序列
题目链接:
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序列的更多相关文章
- HDU5629:Clarke and tree(DP,Prufer)
Description Input Output Sample Input Sample Output Solution 题意:给你$n$个点,还有每个点的度数,问你任选$i(1\leq i \leq ...
- 【CF917D】Stranger Trees 树形DP+Prufer序列
[CF917D]Stranger Trees 题意:给你一棵n个点的树,对于k=1...n,问你有多少有标号的n个点的树,与给出的树有恰好k条边相同? $n\le 100$ 题解:我们先考虑容斥,求出 ...
- hdu 5464 Clarke and problem dp
Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...
- HDU 5628 Clarke and math dp+数学
Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...
- hdu 1243 反恐训练营(dp 最大公共子序列变形)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1243 d[i][j] 代表第i 个字符与第 j 个字符的最大的得分.,, 最大公共子序列变形 #inclu ...
- hdu 1054 Strategic Game(tree dp)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 5628 Clarke and math——卷积,dp,组合
HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...
- 5.13 省选模拟赛 优雅的绽放吧,墨染樱花 多项式 prufer序列 计数 dp
LINK:优雅的绽放吧,墨染樱花 当时考完只会50分的做法 最近做了某道题受到启发 故会做这道题目了.(末尾附30分 50分 100分code 看到度数容易想到prufer序列 考虑dp统计方案数. ...
- [2021.4.9多校省选模拟35]隐形斗篷 (prufer序列,背包DP)
题面 我编不下去了! 给出 n n n 个点,第 i i i 个点的度数限制为 a i a_i ai,现在需要选出 x x x 个点构成一颗树,要求这 x x x 个点中每个点的度数不超过这个点的 ...
随机推荐
- Part 5 Select statement in sql server
Select specific or all columns select * from 表名 select * from Student select 列名,列名... from 表名 select ...
- 在sql-server上建立mysql链接库
EXEC sp_addlinkedserver @server = N'RESUME_MYSQL_CONN', @srvproduct=N'MySQL ODBC 5.1 Driver', @provi ...
- SQL IDENTITY(int,1,1) 用法
select IDENTITY(int,1,1) as SortID from tb_order 仅当 SELECT 语句中有 INTO 子句时,才能使用 IDENTITY 函数. select ID ...
- Mac下配置cocos2dx2.2.6的Android环境
最近在学习cocos2dx在MAC上如何打包apk,今天先把安装JDK和ANT的过程记来. 首先,打开终端,输入”java -version” 点击回车后,出现如下提示: 我们的MAC上并没有安装过J ...
- python基础:三元运算
学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 1 2 3 4 5 6 7 8 # 普通条件语句 if 1 == 1: name = 'wupeiqi' els ...
- 【转载】#273 - Parameter Modifier Summary
Here's a summary of the different parameter modifiers and how the behavior changes for each, when us ...
- tar 「解/壓」 包
1.tar: short read tar壓縮包文件發生了損壞,或者说不完整. 最近,在寫下載程序的時候,發生了這個問題.初步猜測文件寫完沒有關閉,沒有寫完.
- sicily 1027 MJ, Nowhere to Hide 字符串匹配与排序
1027. MJ, Nowhere to Hide Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description On BBS, th ...
- mysql安装过程中出现的错误问题解决方案
最近在学Django,因为与数据库相关,所以我下载并安装了MySQL,安装的过程真的是一把辛酸泪啊.安装过后,查看是否可以使用,出现了cann't connect to mysql server这个错 ...
- 8.samba server与client配置
server端 1.安装samba:yum install -y samba\* 增加samba用户: useradd smb用户名 smbpasswd -a smb用户名 ...