每一个限制条件相当于一条有向边,

忽略边的方向,就成了一道裸的树形DP题

同BZOJ3167

唯一的区别就是这个$O(n^3)$能过

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i)
#define ll long long
#define mp make_pair
#define maxn 205
const ll md=1000000007; ll h[maxn],to[maxn],ne[maxn],en=0,n;
ll lim[maxn],siz[maxn],tmp[maxn];
ll dp[maxn][maxn],c[maxn][maxn];
char s[maxn]; void add(ll a,ll b)
{to[en]=b;ne[en]=h[a];h[a]=en++;} ll C(ll n,ll m)
{
if (n<0||m<0)
{
return 0;
}
return c[n][m];
} void Tree_DP(ll o)
{
dp[o][1]=1;siz[o]=1;
for (ll i=h[o];i>=0;i=ne[i])
{
Tree_DP(to[i]);
F(j,0,siz[o]+siz[to[i]]+2) tmp[j]=0;
F(j,1,siz[o]) F(k,1,siz[to[i]]) F(_j,j,siz[to[i]]+siz[o])
if (dp[o][j]&&dp[to[i]][k])
{
if (lim[to[i]]==1)
{
if (siz[o]+siz[to[i]]-_j>=siz[to[i]]-k+1+siz[o]-j&&_j>=j)
{
tmp[_j]+=(((ll)dp[o][j]*dp[to[i]][k])%md*C(_j-1,j-1))%md*C(siz[o]+siz[to[i]]-_j,siz[o]-j)%md;
tmp[_j]%=md;
}
}
else
{
if (_j>=j+k&&siz[o]+siz[to[i]]-_j>=siz[o]-j)
{
tmp[_j]+=(((ll)dp[o][j]*dp[to[i]][k])%md*C(_j-1,j-1))%md*C(siz[o]+siz[to[i]]-_j,siz[o]-j)%md;
tmp[_j]%=md;
}
}
}
siz[o]+=siz[to[i]];
F(j,0,siz[o]) dp[o][j]=tmp[j];
}
} void Finout()
{
freopen("in.txt","r",stdin);
freopen("wa.txt","w",stdout);
} int main()
{
memset(h,-1,sizeof h);
scanf("%lld",&n);
scanf("%s",s+2);
c[1][0]=1;c[1][1]=1;c[0][0]=1;
F(i,2,maxn-1)
{
c[i][0]=1;
F(j,1,maxn-1) c[i][j]=(c[i-1][j]+c[i-1][j-1])%md;
}
F(i,2,n)
{
add(i/2,i);
switch(s[i])
{
case '<': lim[i]=1; break;
case '>': lim[i]=-1;break;
}
}
Tree_DP(1);
ll ans=0;
F(i,0,n) (ans+=dp[1][i])%=md;
printf("%lld\n",ans);
}

  

BZOJ 4824 [Cqoi2017]老C的键盘 ——树形DP的更多相关文章

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

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

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

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

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

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

  4. bzoj 4824: [Cqoi2017]老C的键盘【树形dp】

    参考:https://www.cnblogs.com/FallDream/p/bzoj4824.html 画一画就会发现关系形成了一棵二叉树(其实看到n-1就能想到 然后dp,设f[i][j]为点i在 ...

  5. BZOJ 1813 [Cqoi2017]小Q的棋盘 ——树形DP

    唔,貌似以前做过这样差不多的题目. 用$f(i,0/1)$表示从某一点出发,只能走子树的情况下回到根.不回到根的最多经过不同的点数. 然后就可以DP辣 #include <map> #in ...

  6. [CQOI2017]老C的键盘

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

  7. 【BZOJ3167/4824】[Heoi2013]Sao/[Cqoi2017]老C的键盘

    [BZOJ3167][Heoi2013]Sao Description WelcometoSAO(StrangeandAbnormalOnline).这是一个VRMMORPG,含有n个关卡.但是,挑战 ...

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

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

  9. bzoj 4822: [Cqoi2017]老C的任务

    4822: [Cqoi2017]老C的任务 练手速... #include <iostream> #include <cstdio> #include <cstring& ...

随机推荐

  1. mongodb-3.2.8 单机复制集安装

    规划: replSet 复制集名称: rs1 MongoDB数据库安装安装路径为:/usr/local/mongodb/ 复制集成员IP与端口: 节点1: localhost:28010   (默认的 ...

  2. x-shell配置远程连接

    1. 打开x-shell 2. 配置编译属性 3. 配置用户的身份证信息 5. 配置完成之后选择连接

  3. UVA 11400 Lighting System Design 照明系统设计

    首先是一个贪心,一种灯泡要么全都换,要么全都不换. 先排序,定义状态d[i]为前面i种灯泡的最小花费,状态转移就是从d[j],j<i,加上 i前面的j+1到i-1种灯泡换成i的花费. 下标排序玩 ...

  4. URAL 2048 Histroy(打表+模拟)

    因为年历是400年一个循环节的,所以递推出一年的情况,然后递推处理出一个循环节的情况.对于询问,求一个类似前缀和的东西就好了. 跑出来和比样例小一,把A和B加一以后交后AC... 写得时候注意变量的定 ...

  5. 利用python实现整数转换为任意进制字符串

    假设你想将一个整数转换为一个二进制和十六进制字符串.例如,将整数 10 转换为十进制字符串表示为 10 ,或将其字符串表示为二进制 1010 . 实现 以 2 到 16 之间的任何基数为参数: def ...

  6. nodeJS进程管理器pm2

    pm2是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的. PM2是开源的基于Nodejs的进程管 ...

  7. 身份证号正则校验(js校验+JAVA校验)

    js校验身份证号[15位和18位] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...

  8. ECMAScript5 [].reduce()

    ECMAScript 5 的2个归并数组的方法,reduce() reduceRight() 两个方法都会迭代数组的所有项,然后构建一个最终返回的值. 两个参数:   1.函数,一个在每一项上调用的函 ...

  9. centOS下SVN安装和配置

    1>SVN服务器端文件可见问题 在平时使用SVN时候,一直以为在客户提交文件,那么在服务器对应的版本库下面就会有相同文件.在自己搭建后,发现提交到服务器端文件完全看不见.... 这是由于SVN服 ...

  10. CSS3的渐变-gradient

    CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). CSS3的线性渐变 一.线性渐变在Mozilla下的应用 语法: -moz-li ...