给定树,每条边有个大于号或者小于号,表示两个节点编号的大小关系。问有多少种树满足条件。n <= 100

解:树形DP。

设fij表示以i为根的子树中i是第j小的。转移的时候要乘上两个组合数。

 #include <bits/stdc++.h>

 const int N = , MO = ;

 struct Edge {
int nex, v, len; /// 0 fa<son 1 fa>son
}edge[N << ]; int tp; int f[N][N], e[N], n, siz[N], temp[N], C[N][N];
char str[N]; inline void add(int x, int y, int z) {
tp++;
edge[tp].v = y;
edge[tp].len = z;
edge[tp].nex = e[x];
e[x] = tp;
return;
} void DFS(int x) {
siz[x] = ;
f[x][] = ;
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
//printf("%d -> %d \n", x, y);
DFS(y);
/// DP
memcpy(temp, f[x], sizeof(f[x]));
memset(f[x], , sizeof(f[x]));
for(int j = ; j <= siz[x]; j++) {
/// temp[j]
if(!temp[j]) continue;
for(int k = ; k <= siz[y]; k++) {
//if(y == 5) printf("len = %d \n", edge[i].len);
if(edge[i].len) { /// fa > son
for(int p = j + k; p <= j + siz[y]; p++) {
f[x][p] = (f[x][p] + 1ll * temp[j] * f[y][k] % MO * C[p - ][j - ] % MO * C[siz[x] + siz[y] - p][siz[x] - j] % MO) % MO;
//printf("f %d %d = %d \n", x, p, f[x][p]);
}
}
else { /// fa < son
for(int p = j; p <= j + k - 1; p++) {
f[x][p] = (f[x][p] + 1ll * temp[j] * f[y][k] % MO * C[p - 1][j - 1] % MO * C[siz[x] + siz[y] - p][siz[x] - j] % MO) % MO;
//printf("f %d %d = %d \n", x, p, f[x][p]);
}
}
}
}
siz[x] += siz[y];
}
return;
} int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) {
C[i][] = C[i][i] = ;
for(int j = ; j < i; j++) {
C[i][j] = (C[i - ][j] + C[i - ][j - ]) % MO;
}
}
scanf("%s", str);
for(int i = ; i <= n; i++) {
if(str[i - ] == '<') {
add(i / , i, );
}
else {
add(i / , i, );
}
} DFS(); int ans = ;
for(int i = ; i <= n; i++) {
ans = (ans + f[][i]) % MO;
}
printf("%d\n", ans);
return ;
}

AC代码

LOJ#3023 老C的键盘的更多相关文章

  1. bzoj 4824: [Cqoi2017]老C的键盘

    Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 ...

  2. [bzoj4824][Cqoi2017]老C的键盘

    来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序在某种 ...

  3. [CQOI2017]老C的键盘

    [CQOI2017]老C的键盘 题目描述 额,网上题解好像都是用的一大堆组合数,然而我懒得推公式. 设\(f[i][j]\)表示以\(i\)为根,且\(i\)的权值为\(j\)的方案数. 转移: \[ ...

  4. [BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数

    4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 218  Solved: 171[Submit][Statu ...

  5. [BZOJ4824][CQOI2017]老C的键盘(树形DP)

    4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 193  Solved: 149[Submit][Statu ...

  6. [bzoj4824][洛谷P3757][Cqoi2017]老C的键盘

    Description 老 C 是个程序员. 作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也 ...

  7. Luogu P3757 [CQOI2017]老C的键盘

    题目描述 老C的键盘 题解 显然对于每个数 x 都有唯一对应的 \(x/2\) , 然而对于每个数 x 却可以成为 \(x*2\) 和 \(x*2+1\) 的对应数 根据这一特性想到了啥??? 感谢l ...

  8. 【CQOI2017】老C的键盘

    Description https://loj.ac/problem/3023 一句话题意:给你一棵完全二叉树,每条边有一个方向,求这棵树有多少种不同的拓扑序. Solution 简化题意后,其实就是 ...

  9. 洛谷 P3757 [CQOI2017]老C的键盘

    题面 luogu 题解 其实就是一颗二叉树 我们假设左儿子小于根,右儿子大于根 考虑树形\(dp\) \(f[u][i]\)表示以\(u\)为根的子树,\(u\)为第\(i\)小 那么考虑子树合并 其 ...

随机推荐

  1. Vue 中提示报错 handlers[i].call is not a function解决方法

    Vue 中提示警告 TypeError: handlers[i].call is not a function at callHook (vue.esm.js?a026:2921) at Object ...

  2. java学习之—链表(1)

    /** * 单链表操作 * Create by Administrator * 2018/6/14 0014 * 下午 2:05 **/ public class Link { public int ...

  3. 本地git连接远程github

    git要连接GitHub仓库,是通过SSH加密连接的,所以必须要创建SSH key ssh-key -t rsa -C "youremail@example.com" 这里邮箱必须 ...

  4. DAY09、函数

    一.函数的定义:跟变量名的定义大同小异 1.声明函数的关键词:def 2.函数(变量)名:使用函数的依据 3.参数列表:()   参数个数可以为0到n个,但()一定不能丢,完成功能的必要条件 4.函数 ...

  5. Yii2的使用

    yii2的下载安装 使用下载好的文件配置高级模板,在配置文件配置好数据库和gii 在common模板配置db: 在backend模板配置gii: 配置nginx服务器访问backend和fronten ...

  6. springboot+jpa+mysql+redis+swagger整合步骤

    springboot+jpa+MySQL+swagger框架搭建好之上再整合redis: 在电脑上先安装redis: 一.在pom.xml中引入redis 二.在application.yml里配置r ...

  7. Maven最佳实战

    Maven中内置的隐藏变量: http://www.cnblogs.com/quanyongan/category/471332.html Maven提供了三个隐式的变量可以用来访问环境变量,POM信 ...

  8. Ubuntu install flash

    Software&Updates - Other Software - Canonical Parners sudo apt install adobe-flashplugin

  9. JS实现控制HTML5背景音乐播放暂停

    首先在网页中嵌入背景音乐,html5代码为: <script src="http://wuover.qiniudn.com/jquery.js"></script ...

  10. c++数字和字符串的转换

    1  利用stringstream 添加头文件 #include<sstream> 数字转字符串 #include <string>   #include <sstrea ...