首先由一个神奇的序列叫做Purfer序列,他可以表示一棵树,且每个节点出现此时为度数-1(因此总长为n-2)。

然后dp,用f[i][j][k]表示用前i个点中的j个点构成了一个长度为k的Purfer序列(当然要符合条件),那么有$f[i][j][k]=f[i-1][j][k]+\sum\limits_{i=0}^{a[i]-1}f[i-1][j-1][k-l]\cdot c(k,l)$,可以类似背包的消掉i(j和k要倒序),然后递推即可。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 105
4 #define mod 1000000007
5 int t,n,a[N],f[N][N],c[N][N];
6 int main(){
7 for(int i=0;i<=100;i++)c[i][0]=c[i][i]=1;
8 for(int i=2;i<=100;i++)
9 for(int j=1;j<i;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
10 scanf("%d",&t);
11 while (t--){
12 scanf("%d",&n);
13 memset(f,0,sizeof(f));
14 f[0][0]=1;
15 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
16 for(int i=1;i<=n;i++)
17 for(int j=i;j;j--)
18 for(int k=n-2;k>=0;k--)
19 for(int l=0;l<a[i];l++)
20 f[j][k]=(f[j][k]+1LL*f[j-1][k-l]*c[k][l])%mod;
21 printf("%d ",n);
22 for(int i=2;i<n;i++)printf("%d ",f[i][i-2]);
23 printf("%d\n",f[n][n-2]);
24 }
25 }

最新文章

  1. C# 泛型
  2. 使用vlc播放器做rtsp流媒体服务器
  3. 看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
  4. nodejs随记03
  5. 从零开始学习Node.js例子六 EventEmitter发送和接收事件
  6. ajax跳转页面问题
  7. ### Theano
  8. centos6.5 安装python2.7.5
  9. 推荐一款自己的软件作品[豆约翰博客备份专家],新浪博客,QQ空间,CSDN,cnblogs博客备份,导出CHM,PDF(转载)
  10. thinkphp框架dump友好调试输出函数
  11. 【HDU1232】畅通工程(并查集基础题)
  12. class A&lt;T&gt;where T
  13. 基于PHP——简单的WSDL的创建(WSDL篇)
  14. sql server基础学习之引号
  15. python3+django2 开发易语言网络验证(上)
  16. 从安装Mac OS X虚拟机到第一个IOS程序
  17. CS1704问题汇总
  18. Hdu dp
  19. Oracle 学习(scott方案)
  20. Docker与Android Studio的冲突问题

热门文章

  1. Serverless:这真的是未来吗?(一)
  2. openGauss X ShardingSphere,分布式方案的另一种最佳实践
  3. 【集成学习】:Stacking原理以及Python代码实现
  4. 实现前后端分离,最好的方案就是SPA(Single Page Application)
  5. nginx搭建网站踩坑经历
  6. UnboundLocalError: local variable &#39;range&#39; referenced before assignment
  7. Ubuntu 用户管理/权限管理
  8. 2020BUAA软工热身作业
  9. ST表 ----kzsn考挂后有感
  10. 2021.6.17考试总结[NOIP模拟8]