**链接 : ** Here!

思路 :

  1. 首先这棵家族树非常非常非常有特点, 家族里的人要么没有孩子, 要么有两个孩子, 所以这棵家族树是一颗满二叉树.

  2. 设定状态 $dp[i][j]$ 为 $i$ 个人组成的不超过 $j$ 层的家谱结构种数, 首先明确一点, 那些状态会为这个状态贡献值 ? 自然能够想到左右两个孩子, 也就是 $dp[m][j-1]$, $dp[i-1-m][j-1]$ $(1 \leq m \leq i-2)$ , 那么很自然的就能够得到状态转移方程 :

    1. $dp[1][j] = 1, (1 \leq j \leq K)$

    2. $dp[i][j] = \prod_{m = 1}^{i - 2} {(dp[m][j - 1] * dp[i - 1 - m][j - 1])}, (m \neq 偶数, 2 \leq i \leq N, i \neq 偶数, 2 \leq j \leq K)$

  3. 为什么上面状态转移方程中 $i$ 和 $m$ 都必须为奇数呢, 因为家谱树是一棵满二叉树, 所以节点数量只可能是奇数.

补充 :

  1. 满二叉树:树中除了叶子节点,每个节点都有两个子节点
  2. 完全二叉树:在满足满二叉树的性质后,最后一层的叶子节点均需在最左边
  3. 完美二叉树:满足完全二叉树性质,树的叶子节点均在最后一层(也就是形成了一个完美的三角形)
  4. 一定要和国内的二叉树分类相区别!!!

**代码 : **

/*************************************************************************
> File Name: 奇异家庭.cpp
> Author:
> Mail:
> Created Time: 2017年11月21日 星期二 00时14分38秒
************************************************************************/ #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; // 状态转移方程为dp[i][j] : i个人数组成的不超过j层的家谱结构数
// 假设左子树的节点数量为m, 则右子树的节点数量为i - 1 - m, 注意左右子树节点也一定得是奇数
// 因此dp[i][j] = SIGMA(dp[m][j - 1] * dp[i - 1 - m][j - 1]) (0 < m < i - 1)
const int MAX_N = 200 + 10;
const int MAX_K = 100 + 10;
const int MOD = 9901;
int dp[MAX_N][MAX_K];
int n, k; void solve() {
memset(dp, 0, sizeof(dp));
for (int j = 1 ; j <= k ; ++j) {
dp[1][j] = 1;
}
for (int j = 2 ; j <= k ; ++j) {
// 注意奇数的情况下是不存在解的
for (int i = 3 ; i <= n ; i += 2) {
int sum = 0;
for (int m = 1 ; m < i - 1 ; m += 2) {
sum = (sum + (dp[m][j - 1] * dp[i - 1 - m][j - 1])) % MOD;
}
dp[i][j] = sum % MOD;
}
}
// 注意, 如果不取模的话dp[n][k] >= dp[n][k - 1]
// 但是如果有了取模运算,dp[n][k]就有可能小于dp[n][k - 1]了
printf("%d\n", (dp[n][k] - dp[n][k - 1] + MOD) % MOD);
}
int main() {
scanf("%d%d", &n, &k);
if (!(n & 1)) printf("0\n");
else solve();
return 0;
}

计蒜客 奇异家庭 (DP)的更多相关文章

  1. 计蒜客 31436 - 提高水平 - [状压DP]

    题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...

  2. 计蒜客 31434 - 广场车神 - [DP+前缀和]

    题目链接:https://nanti.jisuanke.com/t/31434 小 D 是一位著名的车手,他热衷于在广场上飙车.每年儿童节过后,小 D 都会在广场上举行一场别样的车技大赛. 小 D 所 ...

  3. [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】

    Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...

  4. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  5. 2019计蒜客信息学提高组赛前膜你赛 #2(TooYoung,TooSimple,Sometimes Naive

    计蒜客\(2019CSP\)比赛第二场 巧妙爆零这场比赛(我连背包都不会了\(QWQ\) \(T1\) \(Too\) \(Young\) 大学选课真的是一件很苦恼的事呢! \(Marco\):&qu ...

  6. 计蒜客 作弊揭发者(string的应用)

    鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...

  7. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  8. 计蒜客模拟赛5 D2T1 成绩统计

    又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...

  9. 计蒜客 等边三角形 dfs

    题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...

随机推荐

  1. HDU 5245 上海大都会 J题 (概率期望)

    这道题的概率可以单独考虑每个格子对期望的贡献值.因为其实每个格子是否被选都可以认为是独立的,单独一个格子贡献的期望为1*(该格子K次被选的概率),所以答案其实就是每个格子K次被选中的概率之和. #in ...

  2. linux 下ip命令对比ifconfig命令

    原文:https://linux.cn/article-3144-1.html ------------------------------------------------------------ ...

  3. 2.6-NAT

    2.6-NAT     网络地址转换协议NAT(Network Address Translation):     交换和远程都要用,先上什么就放在哪一块讲,具体来说NAT还是属于远程的.       ...

  4. mongodb mapreduce使用总结

    文章来自本人个人博客: mongodb mapreduce使用总结 ​ 大家都知道,mongodb是一个非关系型数据库.也就是说.mongodb数据库中的每张表是独立存在的,表与表之间没有不论什么依赖 ...

  5. HDU2899 Strange fuction 【二分】

    Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. 阻尼滑动--能够滑动过度的ScrollView(OverScrollView)

    贴上一个我自己用过的阻尼滑动的ScrollView,像QQ里面那种滑动效果,尽管不是我写的,可是我认为还能够,贴出来做个记录,实用到的时候免得到处去找. 代码例如以下: /* * Copyright ...

  7. cocos2d-x 3.7 win7 32+Android 环境配置

    之前用的cocos2d-x 2.2.6 版本号,近期换成了3.7.眼下的最新版.整个过程中也碰到了不少问题.如今已经成功移植到手机上了. 分享下整个过程,希望能帮到别人.(所需软件已打包) [下载软件 ...

  8. 使用OpenCV滑动条写成的简单调色器,实时输出RGB值

    好久没有写博客了,近期在看OpenCV.于是动手写了个简单的RGB调色器,在终端实时输出RGB的值.通过这个程序学习滑动条的使用.程序中主要用到cvCreateTrackbar ,其使用方法例如以下: ...

  9. oc46--nonatomic, retain

    // // Person.h #import <Foundation/Foundation.h> #import "Room.h" #import "Car. ...

  10. bzoj5130: [Lydsy1712月赛]字符串的周期

    这道题很有意思啊. 字符串循环节用KMP(手推一下) 假如是26^12肯定很不滋磁 但是可以发现ABA和BCB和BAB这些都是等价的 那就把最小的拿出来搞再乘个排列数就好了 #include<c ...