【CF724F】Uniformly Branched Trees

题意:询问n个点的每个非叶子点度数恰好等于d的不同构的无根树的数目。

$n\le 1000,d\le 10$。

题解:先考虑有根树的版本。我们用$DP(n,m,k)$表示n个点,其中根的度数为m,其余点度数为d,根的最大的儿子的子树不能超过k的方案数。转移时我们可以枚举有多少个子树大小为k的。假如有i个,则贡献为:$DP(n-ik,m-i,k-1)\times{{DP(k,d-1,k-1)+i-1} \choose{i}}$,采用记忆化搜索是一个非常优秀的方法。

如果是无根树呢?如果有一个点为重心,则我们令重心为根即可。如果有两个重心,我们枚举其中一个,用组合数算一算即可。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int n,m;
ll P;
ll ine[1010];
int f[1010][11][1010];
ll DP(int n,int d,int k)
{k=min(k,n-1);if(f[n][d][k]!=-1)  return f[n][d][k];if((n==1&&d==m-1)||(n==1&&!d))  return 1;if(n==1||!k) return 0;int j;ll ret=DP(n,d,k-1),t=DP(k,m-1,k),tmp=1;for(j=1;j*k<n&&j<=d;j++){tmp=tmp*(t+j-1)%P*ine[j]%P;ret=(ret+tmp*DP(n-k*j,d-j,k-1))%P;}return f[n][d][k]=ret;
}
int main()
{scanf("%d%d%lld",&n,&m,&P);if(n==1||n==2){puts("1");return 0;}if((n-2)%(m-1)!=0){puts("0");return 0;}int i;ine[0]=ine[1]=1;for(i=2;i<=n;i++)   ine[i]=P-(P/i)*ine[P%i]%P;memset(f,-1,sizeof(f));ll ans=DP(n,m,(n-1)/2);if(!(n&1)){ll t=DP(n/2,m-1,n/2-1);ans=(ans+t*(t+1)/2)%P;}printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/CQzhangyu/p/8503868.html

【CF724F】Uniformly Branched Trees 动态规划相关推荐

  1. CF724F Uniformly Branched Trees

    CF724F Uniformly Branched Trees 有根树可以统计.无根树难以统计.因为可以换根. 所以不让换根:只要两个无根树在重心位置不同构,就一定不同构 每个本质不同的树在重心位置统 ...

  2. leetcode解题文件夹

    点击打开链接点击打开链接点击打开链接參考文献:http://blog.csdn.net/lanxu_yy/article/details/17848219 只是本文准备用超链接的方式连接到对应解答页面 ...

  3. Nature Milestones | 近20年人类癌症研究领域14项里程碑式进展!

    导 读  癌症目前仍然是全世界人类最大的杀手之一.近日,Nature Genetics和Nature Medicine联合发表了"Nature Milestones in Cancer&qu ...

  4. 2016区域赛前冲刺训练

    UPD 2016.10.23 shift-and (2题) Codeforces 训练 现在已经完成了: 191 [Codeforces Round #377] (6/6) Div 2 A Buy a ...

  5. 图解近300年人类抗癌史

    据资料显示,全中国每6分钟就有一人被确诊为癌症,每天有8550人成为癌症患者,每七到八人中就有一人死于癌症.未来10年,中国的癌症发病率与死亡率仍将继续攀升.目前癌症已成为人类健康第一杀手,人们无不& ...

  6. [LeetCode]: 96: Unique Binary Search Trees

    题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For e ...

  7. LeetCode-Unique Binary Search Trees

    研究生开学以来一直在看书看文献,很少有机会去写代码.为了不让以后校招时被虐的太惨,准备每天看一道LeetCode上的题,练练手. 因此准备开一个新的专题,记录下LeetCode上的一些有意思的小的算法 ...

  8. 『ACM-算法-动态规划』初识DP动态规划算法

    一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...

  9. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

  10. 基础省选+NOI-第4部分 动态规划

    1.期望概率DP [整理]简单的数学期望和概率DP [整理]简单的数学期望和概率DP - nimphy - 博客园 期望&概率dp总结 期望&概率dp总结_十分残念的博客-CSDN博客 ...

最新文章

  1. SSL证书可以给多个域名使用吗?
  2. 泛海三江手动控制盘怎么设置_热板机如何操作控制系统?
  3. JMeter java.net.URISyntaxException:Illegalcharacterinquery解决方案
  4. 跨链Cosmos(7)普通交易流程
  5. Linux设备驱动之UART驱动结构
  6. TCP IP基础知识的复习
  7. JAVA获取json中的值
  8. vue学习经验分享,在这个大前端时代,你再不会vue就out啦
  9. 雷林鹏分享:Laravel 安装
  10. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(五十) 终章!新的曙光!...
  11. 如何解决Linux 系统下 ifconfig 命令无网络接口 ens33
  12. 鹏华基金:科技赋能 打造公募基金的头部机构
  13. 如何注册CSDN博客
  14. python实现 stft_Python中可转换的STFT和ISTFT
  15. 各种串口助手工具分享
  16. word插入页码后只有当前页有页码
  17. 人工智能技术对我们的生活,有多少影响?
  18. 如果不是对的人,最终的结局大概不会好吧
  19. AutoDesk CAD激活后闪退解决方法
  20. MySQL 的 SQL语句

热门文章

  1. [#32;] 在wordpress [the_excerpt()] 函数执行的妙用
  2. linux中怎么连接wifi密码,Linux终端中连接WiFi的方法
  3. 全国大学生英语竞赛总结
  4. NOSql数据库的优缺点分析
  5. python从键盘输入一个字符串将小_python如何从键盘获取输入实例
  6. 实习日记5:过滤器+批量删除+角色管理
  7. linux文本三剑客演讲稿,Linux文本三剑客总结
  8. 在水晶报表中实现任意选择指定字段显示 (阿泰)
  9. e01文件镜像SHA1值
  10. Android 4.4 PM机制系列(四) APK安装需要空间分析