题意:

给一匹配的括号序列,要求每对括号恰有一个被染成蓝或红色,要求相邻的括号不同色,求方案数。

解法:

类比树的hash将括号序列转化为一棵树,树上子节点之间不得出现冲突,

子节点和父节点不得出现冲突,问题转化为树形dp问题,$O(n)$解决。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <vector> #define N 1000010
#define LL long long
#define P 1000000007LL using namespace std; /*
1 -> 10
2 -> 01
3 -> 20
4 -> 02
*/ int totn;
int next[N],q[N];
LL f[N][];
LL h[N][];
char S[N];
vector<int> G[N]; int build(int l,int r)
{
int x=++totn;
G[x].clear();
l++;
r--;
while(l<r)
{
G[x].push_back(build(l,next[l]));
l=next[l]+;
}
return x;
} void dp(int x)
{
int nl=G[x].size();
if(!nl)
{
for(int i=;i<;i++)
f[x][i]=;
return;
}
for(int i=;i<nl;i++) dp(G[x][i]);
for(int t=;t<;t++)
{
for(int i=;i<;i++) h[][i]=;
h[][t]=;
for(int i=;i<=nl;i++)
{
int p=G[x][i-];
LL sum = (h[i-][]+h[i-][]+h[i-][])%P;
h[i][] = sum * f[p][] % P;
h[i][] = sum * f[p][] % P; h[i][] = h[i-][]*f[p][]%P + h[i-][]*f[p][]%P;
if(h[i][]>=P) h[i][]-=P;
h[i][] += h[i-][]*f[p][]%P + h[i-][]*f[p][]%P;
if(h[i][]>=P) h[i][]-=P;
}
if(t==)
{
f[x][] = (h[nl][] + h[nl][] + h[nl][]) % P;
f[x][] = (h[nl][] + h[nl][])%P;
f[x][] = (h[nl][] + h[nl][])%P;
}
else if(t==) f[x][] = (h[nl][] + h[nl][] + h[nl][])%P;
else f[x][] = (h[nl][] + h[nl][] + h[nl][])%P;
}
} int n; int main()
{
freopen("test.txt","r",stdin);
while(~scanf("%s",S+))
{
S[]='(';
n=strlen(S);
S[n]=')';
S[n+]='\0';
n++;
int ed=;
totn=;
for(int i=;i<n;i++)
{
if(S[i]=='(') q[++ed]=i;
else
{
next[q[ed]]=i;
ed--;
}
}
build(,n-);
dp();
cout << f[][] << endl;
}
return ;
}
/*
(())
(()())
()
*/

Coloring Brackets的更多相关文章

  1. CF149D. Coloring Brackets[区间DP !]

    题意:给括号匹配涂色,红色蓝色或不涂,要求见原题,求方案数 区间DP 用栈先处理匹配 f[i][j][0/1/2][0/1/2]表示i到ji涂色和j涂色的方案数 l和r匹配的话,转移到(l+1,r-1 ...

  2. CodeForces 149D Coloring Brackets

    Coloring Brackets time limit per test: 2 seconds memory limit per test: 256 megabytes input: standar ...

  3. Codeforces Round #106 (Div. 2) D. Coloring Brackets 区间dp

    题目链接: http://codeforces.com/problemset/problem/149/D D. Coloring Brackets time limit per test2 secon ...

  4. Codeforces 149D Coloring Brackets(树型DP)

    题目链接 Coloring Brackets 考虑树型DP.(我参考了Q巨的代码还是略不理解……) 首先在序列的最外面加一对括号.预处理出DFS树. 每个点有9中状态.假设0位不涂色,1为涂红色,2为 ...

  5. Codeforces Round #106 (Div. 2) D. Coloring Brackets —— 区间DP

    题目链接:https://vjudge.net/problem/CodeForces-149D D. Coloring Brackets time limit per test 2 seconds m ...

  6. codeforces 149D Coloring Brackets (区间DP + dfs)

    题目链接: codeforces 149D Coloring Brackets 题目描述: 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选择:涂红 ...

  7. CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)

    1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...

  8. CF149D Coloring Brackets

    CF149D Coloring Brackets Link 题面: 给出一个配对的括号序列(如"\((())()\)"."\(()\)"等, "\() ...

  9. Coloring Brackets (区间DP)

    Once Petya read a problem about a bracket sequence. He gave it much thought but didn't find a soluti ...

  10. CF 149D Coloring Brackets 区间dp ****

    给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内 ...

随机推荐

  1. LNMPA遇到504 Gateway time-out错误的解决方法

    Nginx的特点是处理静态很给力,Apache的特点是处理动态很稳定,两者结合起来便是LNMPA,nginx处理前端,apache处理后端,这样处理静态会很快,处理动态会很稳定. 当我以为安装完成以后 ...

  2. GoogleFusionTablesAPI初探地图与云计算

    http://developer.51cto.com/art/200906/129324.htm http://yexiaochai.iteye.com/blog/1893735 http://yex ...

  3. kubernetes调度之 PriorityClass

    系列目录 kubernetes支持多种资源调度模式,前面讲过简单的基于nodeName和nodeSelector的服务器资源调度,我们称之为用户绑定策略,下面简要描述基于PriorityClass的同 ...

  4. kubernetes的Service Account和secret

    系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它 ...

  5. nanoporetech/nanonet

    nanoporetech/nanonet CodeIssues 7Pull requests 0Projects 0Wiki Insights  First generation RNN baseca ...

  6. jackrabbit官方英文文档加补充(转载)

    关于Jackrabbit To get started with Jackrabbit you should first become familiar with the JCR API. Downl ...

  7. 模式识别之不变矩---SIFT和SURF的比较

  8. 解决Android Studio下Element layer-list must be declared问题

    近期将一个项目从Eclipse转到Android Studio. 项目中使用了环信demo中的一些xml资源,转换后发现color资源目录下诸如layer-list或者shape等标签报Element ...

  9. DuiLib笔记之设置文本字体

    设置文本字体要用到Font 它的常用属性如下 id 用于标识Font,类型:INT name 用于指定字体名称,类型:STRING size 用于指定字体大小,类型:INT bold 用于指定是否加粗 ...

  10. 如何解决Apache无法启动的问题

    今天重装xampp后,一直无法启动Apache,提示以下错误: 22:36:54 [Apache] Attempting to start Apache app...22:36:54 [Apache] ...