博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
usaco Cow Pedigrees
阅读量:4595 次
发布时间:2019-06-09

本文共 990 字,大约阅读时间需要 3 分钟。

 题意是,求N,个节点,组成高度为K的二叉树,形态有多少,且每个节点的度要么为0要么为2.

 这题第一眼看后就知道要dp,但却没找到方程,看了别人题解之后才知道,原来是从分治的思想出发的。

 dp[i][j]的意思是用i个节点组成高度不超过j的二叉树的形态,那么dp[i][j]=dp[i][j]+dp[k][j-1]*dp[i-1-k][j-1],k=1,3,5.。。。。

就是去掉根节点之后,求出左子树节点个数为k的形态数,乘上右子树节点个数为i-1-k时的形态数。

 输出dp[N][K]-dp[N][K-1]的意思是,用N个节点组成高度不大于K的形态数,减去用N个节点组成高度不大于k-1的形态数,就是用N个节点组成高度准确为K的形态数

/*ID: modengd1PROG: nocowsLANG: C++*/#include 
#include
#include
#include
using namespace std;int dp[210][110];int main() { freopen("nocows.in","r",stdin); freopen("nocows.out","w",stdout); int N,K; scanf("%d%d",&N,&K); memset(dp,0,sizeof(dp)); for(int i=1;i<=K;i++) { for(int j=1;j<=N;j+=2) { if(j==1)dp[j][i]=1;//用一个节点,只有一种情况 for(int k=1;k<=j-2;k+=2) dp[j][i]=(dp[j][i]+dp[k][i-1]*dp[j-1-k][i-1])%9901; } } cout<<(dp[N][K]-dp[N][K-1]+9901)%9901<

  

转载于:https://www.cnblogs.com/modengdubai/p/4782572.html

你可能感兴趣的文章
sscanf的最基础用法(非原创)
查看>>
A new start
查看>>
GIt-恢复进度
查看>>
[转载]几个有趣的Linux命令
查看>>
[原]openstack-kilo--issue(十六) instance can't get ip 虚拟机不能得到ip(1)
查看>>
面向对象(二)
查看>>
滑动的scrollowview的导航渐变
查看>>
[国嵌攻略][088][多线程同步]
查看>>
Ichars制作数据统计图
查看>>
NET程序之小试牛刀
查看>>
Java中的String,StringBuilder,StringBuffer三者的区别
查看>>
JavaWeb--自定义标签4--带父标签的自定义标签
查看>>
FreeBSD 下sac101.6a编译失败解决办法
查看>>
python之list
查看>>
vs 配色方案
查看>>
大熊君说说JS与设计模式之------单例模式Singleton()
查看>>
ROC曲线【转】
查看>>
jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关...
查看>>
python字符串内建函数
查看>>
第一章 javascript简介
查看>>