Codeforces 149D Coloring Brackets(树型DP)
题目链接 Coloring Brackets
考虑树型DP。(我参考了Q巨的代码还是略不理解……)
首先在序列的最外面加一对括号。预处理出DFS树。
每个点有9中状态。假设0位不涂色,1为涂红色,2为涂蓝色。
0:0 0
1:0 1
2:0 2
3:1 0
4:1 1
5:1 2
6:2 0
7:2 1
8:2 2
其中1、2、3、6为有效的状态。
DP的时候如果当前括号下没有子括号那么这个状态方案数为1。
先处理出第一对括号。然后处理接下来的括号。
拼接的时候如果出现()() 中间两个括号同时染色并且颜色相同那么该状态不合法,跳过。
转移的时候滚动一下。
如果当前节点不是根的话那么最后处理的时候只保留合法的状态。
#include <bits/stdc++.h> using namespace std; #define LL long long const int valid[] = {,,,};
const LL mod = ;
const int root = ; char s[];
vector <int> e[];
stack <int> stk;
LL f[][];
int n, ret, tot; void dfs(int u){
f[u][] = ;
LL tmp[];
for (int i = , flag = ; i < (int)e[u].size(); i++){
int v = e[u][i];
dfs(v);
if (!flag){
for (int tk = (f[u][] = ); tk < ; ++tk){
int k = valid[tk];
f[u][k] = f[v][k];
} flag = ;
} else{
for (int j = ; j < ; ++j) tmp[j] = ;
for (int j = ; j < ; ++j)
for (int tk = ; tk < ; ++tk){
int k = valid[tk];
int cl[] = {j / , j % }, cr[] = {k / , k % };
if (cl[] > && cr[] > && cl[] == cr[]) continue;
int p = cl[] * + cr[];
(tmp[p] += 1LL * f[u][j] * f[v][k]) %= mod;
} for (int j = ; j < ; ++j) f[u][j] = tmp[j];
}
} if (u != root){
for (int j = ; j < ; ++j) tmp[j] = ;
for (int j = ; j < ; ++j)
for (int tk = ; tk < ; ++tk){
int k = valid[tk];
int ci[] = {j / , j % }, co[] = {k / , k % };
if ((ci[] > && co[] > && ci[] == co[])
|| (ci[] > && co[] > && ci[] == co[])) continue;
(tmp[k] +=f[u][j]) %= mod;
}
for (int j = ; j < ; ++j) f[u][j] = tmp[j];
}
} int main(){ scanf("%s", s + );
n = strlen(s + ); tot = ;
s[] = '(', s[n + ] = ')';
for (int i = ; s[i]; ++i){
if (s[i] == '('){
if (tot) e[stk.top()].push_back(tot);
stk.push(tot++);
} else stk.pop();
} dfs(root);
ret = ;
for (int i = ; i < ; ++i) (ret += f[root][i]) %= mod;
return * printf("%d\n", ret);
}
Codeforces 149D Coloring Brackets(树型DP)的更多相关文章
- CodeForces 149D Coloring Brackets (区间DP)
题意: 给一个合法的括号序列,仅含()这两种.现在要为每对括号中的其中一个括号上色,有两种可选:蓝or红.要求不能有两个同颜色的括号相邻,问有多少种染色的方法? 思路: 这题的模拟成分比较多吧?两种颜 ...
- codeforces 149D Coloring Brackets (区间DP + dfs)
题目链接: codeforces 149D Coloring Brackets 题目描述: 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选择:涂红 ...
- CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...
- CodeForces 149D Coloring Brackets
Coloring Brackets time limit per test: 2 seconds memory limit per test: 256 megabytes input: standar ...
- CodeForces 149D Coloring Brackets 区间DP
http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2 ...
- Codeforces 23E Tree(树型DP)
题目链接 Tree $dp[x][i]$表示以x为根的子树中x所属的连通快大小为i的时候 答案最大值 用$dp[x][j]$ * $dp[y][k]$ 来更新$dp[x][j + k]$. (听高手说 ...
- Codeforces 581F Zublicanes and Mumocrates(树型DP)
题目链接 Round 322 Problem F 题意 给定一棵树,保证叶子结点个数为$2$(也就是度数为$1$的结点),现在要把所有的点染色(黑或白) 要求一半叶子结点的颜色为白,一半叶子结点的 ...
- 【题解】codeforces 219D Choosing Capital for Treeland 树型dp
题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能到达任意一 ...
- POJ3659 Cell Phone Network(树上最小支配集:树型DP)
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...
随机推荐
- LeetCode(134) Gas Station
题目 There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. ...
- 使用IAR在开发nordic问题记录
使用IAR在开发nordic的sdk的时候,官方有一段话*****Note for IAR 8 users:(Libraries for IAR 8 require wchar_t to be of ...
- hdu 6318
Long long ago, there was an integer sequence a.Tonyfang think this sequence is messy, so he will cou ...
- 远程连接MYSQL8.0服务器问题
title: 远程连接MYSQL8.0服务器问题 date: 2018-07-07 11:02:26 updated: tags: [MYSQL,坑] description: keywords: c ...
- EXCEL宏做数据拆分
用处:将大容量的EXCEL工作簿分解成若干个小的工作簿 Sub aa() For i = 1 To 8 Set nb = Workbooks.Add nb.SaveAs Filename:=ThisW ...
- Oracle 表空间的日常维护与管理
目录 Oracle 表空间的日常维护与管理 1.创建数据表空间 2.创建临时表空间 3.创建 UNDO 表空间 4.表空间的扩展与修改大小 5.表空间重命名 6.表空间的删除 7.更改表空间的读写模式 ...
- ogre3d环境配置与简单程序示例
SDK安装以及编译 1.下载SDK,地址如下 http://www.ogre3d.org/download/sdk 2.安装SDK,直接解压到相应目录,如D:/ogreSDK 3.我用的是1.8版本, ...
- 令人惊叹的Chrome浏览器插件
Chrome是一个简洁而又高效(高性能,高消耗)的浏览器.接下来让我吐血推荐一些常用的Chrome插件. 日常插件 uBlock Origin ----- 比Adblock性能更高的广告插件. Adk ...
- MyCAT+MySQL 搭建高可用企业级数据库集群——第3章 MyCat核心配置讲解
3-1 章节综述 3-2 常用配置文件间的关系 3-3 server.xml配置详解 3-4 log4j2.xml配置文件 3-5 rule.xml 3-6 常用分片算法(上) 3-7 常用分片算法( ...
- UITabBarController支持旋转
1.默认的UITabBarController不支持四个方向,但可以给UITabBarController增加一个类别,实现旋转:具体做法: 在工程添加一个.h和.m文件如下: //Rotation. ...