题面

这道题我觉得是个不错的题;

根据题意可以较清晰的发现ans只和n和k有关;(因为输入的只有这两个数啊~);

那么设f[i][j]表示前i层用了j个节点的方案数,g[i][j]表示深度小于等于i并且用了j个节点的方案数总和;

对于一颗树,可以把它分成3部分:根节点,左字树,右子树;

对于一颗深度为i的树,左子树和右子树至少有一个达到了深度i-1;

所以转移方程是:f[i][j]+=f[i-1][k]*g[i-2][j-k-1]+f[i-1][j-k-1]*g[i-2][k]+f[i-1][k]*f[i-1][j-k-1];

g[i][j]+=g[i-1][j]+f[i-1][j];

另外一定要注意取模的细节!!!

#include <bits/stdc++.h>
#define p 9901
using namespace std;
int n,m;
int f[][],g[][];
int main()
{
cin>>n>>m;
f[][]=;
for(register int i=;i<=m;i++){
for(register int j=;j<=n;j+=){
for(register int k=;k<=j--k;k+=){
int tmp=;
if(k==j--k) tmp=;
f[i][j]+=tmp*((f[i-][j-k-]*g[i-][k])%p+(f[i-][k]*g[i-][j-k-])%p+(f[i-][k]*f[i-][j-k-])%p);
f[i][j]%=p;
}
}
for(register int j=;j<=n;j++){
g[i-][j]=(g[i-][j]+g[i-][j]+f[i-][j])%p;
g[i-][j]%=p;
}
}
cout<<f[m][n]%p<<endl;
}

最新文章

  1. js修改后没反应-看看是不是取的缓存
  2. 【转】swift实现ios类似微信输入框跟随键盘弹出的效果
  3. 从数据库导出到excel
  4. VS2008切换设计视图卡死 停止响应
  5. 用java实现简易PC版2048
  6. Java编程提高性能时需注意的地方
  7. Lattice Diamond 学习之编译、检查和设置约束
  8. Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
  9. Echart 商业级数据图表
  10. 本人在安装ADT Bundle for windows的各种问题总结
  11. Java [leetcode 26]Remove Duplicates from Sorted Array
  12. 使用clone
  13. chrome解决http自动跳转https问题
  14. 临时关闭Mac SIP系统完整性保护机制
  15. package.json 里的 dependencies和devDependencies区别
  16. Java过滤掉字符串中的html标签、style标签、script标签
  17. 【转】ArrayList与LinkedList的区别和适用场景
  18. qq空间爬取
  19. 六、uboot 代码流程分析---start.S
  20. ADO.NET介绍2

热门文章

  1. 【转载】多网卡的7种bond模式原理
  2. js+jq 淡入淡出轮播(点击+定时+鼠标进入移出事件)
  3. ltelliJ IDEA 创建Maven web项目无src目录的解决方案
  4. 如何使用git工具
  5. C++入门经典-例6.4-输出字符数组中的内容
  6. Docker入门-常用命令
  7. 线程同步synchronized理解
  8. 使用同步上下文进行C#与VBA代码和Excel之间的交互
  9. DeepFaceLab参数详解之Batch-Size的使用和取值!
  10. iOS charts CombinedChartView First and last bars are shown half only