codeforce 149D Coloring Brackets 区间DP
题目链接:http://codeforces.com/problemset/problem/149/D
继续区间DP啊。。。。
思路:
定义dp[l][r][c1][c2]表示对于区间(l,r)来说,l用c1染色,r用c2染色的方案数。
那么:
1,如果括号l和括号r匹配(即括号l和r为一对括号)那么dp[l][r][c1][c2]+=dp[l+1][r-1][i][j](i与c1为不同的颜色,j与c2是不同的颜色,或i=0或j=0)
2,如果括号l和括号r不匹配,那么dp[l][r][c1][c2]+=dp[l][m(l)][c1][i]*dp[m(l)+1][r][j][c2];(i与c1为不同的颜色或i=0,j与c2不同,或j=0)(m(l))表示与l匹配的右括号的位置
代码实现,我用的是记忆化搜索的方式:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
char s[];
stack<int>q;
int n;
int m[];
long long int dp[][][][];
long long int ans;
#define MOD 1000000007
void init()
{
memset(m,,sizeof(m));
memset(dp,-,sizeof(dp));
ans=;
}
void Match_Bracks()
{
while(!q.empty()) q.pop();
for(int i=;i<n;i++)
{
if(s[i]=='(') q.push(i);
else
{
int k=q.top();
m[k]=i;
q.pop();
}
}
}
bool check(int a,int b)
{
if(a==||b==||a!=b) return true;
return false;
}
int kk=;
long long int dfs(int l,int r,int c1,int c2)
{
long long int sum=; if(dp[l][r][c1][c2]>=) return dp[l][r][c1][c2];
if(m[l]==r&&r)
{
if((c1==&&c2)||(c2==&&c1))
{
if(l+==r)
return dp[l][r][c1][c2]=;
for(int i=;i<;i++)
for(int j=;j<;j++)
if(check(i,c1)&&check(j,c2))
sum=(sum+dfs(l+,r-,i,j)%MOD)%MOD;
}
else return dp[l][r][c1][c2]=;
}
else
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(check(i,j))
sum=(sum+dfs(l,m[l],c1,i)*dfs(m[l]+,r,j,c2)%MOD)%MOD;
}
return dp[l][r][c1][c2]=sum%MOD;
}
int main()
{
while(scanf("%s",s)!=EOF)
{
init();
n=strlen(s);
Match_Bracks();
for(int i=;i<;i++)
for(int j=;j<;j++)
ans=(ans+dfs(,n-,i,j)%MOD)%MOD;
cout<<ans<<endl;
}
return ;
}
codeforce 149D Coloring Brackets 区间DP的更多相关文章
- codeforces 149D Coloring Brackets (区间DP + dfs)
题目链接: codeforces 149D Coloring Brackets 题目描述: 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选择:涂红 ...
- CF 149D Coloring Brackets 区间dp ****
给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内 ...
- CodeForces 149D Coloring Brackets 区间DP
http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2 ...
- CF149D. Coloring Brackets[区间DP !]
题意:给括号匹配涂色,红色蓝色或不涂,要求见原题,求方案数 区间DP 用栈先处理匹配 f[i][j][0/1/2][0/1/2]表示i到ji涂色和j涂色的方案数 l和r匹配的话,转移到(l+1,r-1 ...
- 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 ...
- Codeforces Round #106 (Div. 2) D. Coloring Brackets 区间dp
题目链接: http://codeforces.com/problemset/problem/149/D D. Coloring Brackets time limit per test2 secon ...
- Codeforces149D - Coloring Brackets(区间DP)
题目大意 要求你对一个合法的括号序列进行染色,并且需要满足以下条件 1.要么不染色,要么染红色或者蓝色 2.对于任何一对括号,他们当中有且仅有一个被染色 3.相邻的括号不能染相同的颜色 题解 用区间d ...
- Codeforces 508E Arthur and Brackets 区间dp
Arthur and Brackets 区间dp, dp[ i ][ j ]表示第 i 个括号到第 j 个括号之间的所有括号能不能形成一个合法方案. 然后dp就完事了. #include<bit ...
- POJ 2995 Brackets 区间DP
POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间 ...
随机推荐
- iOS开发之UITableView及cell重用
1.UITanleview有的两种风格 一种是Plain,一种是Grouped,可以从这里设置风格: 他们样式分别如下: Plain: Grouped: 2.tableView展示数据的过程: (1) ...
- The 15th UESTC Programming Contest Preliminary G - GC?(X,Y) cdoj1564
地址:http://acm.uestc.edu.cn/#/problem/show/1564 题目: G - GC?(X,Y) Time Limit: 3000/1000MS (Java/Others ...
- 2.4G无线收发模块/射频RFM75调试总结/RF知识整理
射频RFM75通信是收发双方都需要编程的器件,收发双方的通道频率,空中传输速率设置一致,调试时必须先调通一块再调另一块,否则出现问题了就不知道是发送端有问题还是接收端有问题.调试必须理清思路.正确的方 ...
- ajax VS websocket
一. ajax VS websocket总结 http://blog.csdn.net/qiuhuanmin/article/details/50719114 二.用Websocket代替Ajax来开 ...
- MySQL(Navicat)运行.sql文件时报错[Err] 2006 - MySQL server has gone away 的解决方法
在my.ini里加上 max_allowed_packet=16M
- 老李分享:大数据框架Hadoop和Spark的异同 2
Spark数据处理速度秒杀MapReduce Spark因为其处理数据的方式不一样,会比MapReduce快上很多.MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果 ...
- 老李分享:loadrunner 的86401错误
老李分享:loadrunner 的86401错误 系统和软件配置: os:windows 2003loadruner版本:LoadRunner11loadrunner:协议:SMTP协议并发数:2 ...
- 4.Java集合总结系列:Map接口及其实现
一.Map接口 Map集合的特点是:通过key值找到对应的value值,key值是唯一的,value可以重复.Map中的元素是无序的,但是也有实现了排序的Map实现类,如:TreeMap. 上面Map ...
- hexo工具介绍及使用方法
Hexo is a fast, simple & powerful blog framework 安装方法:npm install hexo-cli -g; require:node.js g ...
- IP设置
由于家里的IP地址与公司的不一样,每次都要修改很麻烦,所以自己只做了一个IP修改bat. 打开记事本,把一下代码复制到记事本里,保存成bat就OK了.在23行设置自己的IP地址就可以了. @echo ...