CF 149D Coloring Brackets 区间dp ****
给一个给定括号序列,给该括号上色,上色有三个要求
1、只有三种上色方案,不上色,上红色,上蓝色
2、每对括号必须只能给其中的一个上色
3、相邻的两个不能上同色,可以都不上色
求0-len-1这一区间内有多少种上色方案,很明显的区间DP
dp[l][r][i][j]表示l-r区间两端颜色分别是i,j的方案数
0代表不上色,1代表上红色,2代表上蓝色
对于l-r区间,有3种情况
1、if(l+1==r) 说明就只有一对,那么dp[l][r][0][1]=1;
dp[l][r][1][0]=1;
dp[l][r][0][2]=1;
dp[l][r][2][0]=1;
2、if(l与r是配对的)
递归(l+1,r-1)
状态转移dp[l][r][0][1]=(dp[l][r][0][1]+dp[l+1][r-1][i][j])%mod; dp[l][r][1][0]=(dp[l][r][1][0]+dp[l+1][r-1][i][j])%mod;
dp[l][r][0][2]=(dp[l][r][0][2]+dp[l+1][r-1][i][j])%mod; dp[l][r][2][0]=(dp[l][r][2][0]+dp[l+1][r-1][i][j])%mod;
3、if(l与r不配对)
dp[l][r][i][j]=(dp[l][r][i][j]+(dp[l][p][i][k]*dp[p+1][r][q][j])%mod)%mod;
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 705
#define mod 1000000007
char s[N];
int match[N];
int tmp[N];
long long dp[N][N][][];
void getmatch(int len)
{
int p=;
for(int i=; i<len; i++)
{
if(s[i]=='(')
tmp[p++]=i;
else
{
match[i]=tmp[p-];
match[tmp[p-]]=i;
p--;
}
}
}
void dfs(int l,int r)
{
if(l+==r)
{
dp[l][r][][]=;
dp[l][r][][]=;
dp[l][r][][]=;
dp[l][r][][]=;
return ;
}
if(match[l]==r)
{
dfs(l+,r-);
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
if(j!=)
dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
if(i!=)
dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
if(j!=)
dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
if(i!=)
dp[l][r][][]=(dp[l][r][][]+dp[l+][r-][i][j])%mod;
}
}
return ;
}
else
{
int p=match[l];
dfs(l,p);
dfs(p+,r);
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
for(int k=;k<;k++)
{
for(int q=;q<;q++)
{
if(!((k== && q==) || (k== && q==)))
dp[l][r][i][j]=(dp[l][r][i][j]+(dp[l][p][i][k]*dp[p+][r][q][j])%mod)%mod;
}
}
}
}
}
}
int main()
{
while(scanf("%s",s)!=EOF)
{
int len=strlen(s);
getmatch(len);
memset(dp,,sizeof(dp));
dfs(,len-);
long long ans=;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
ans=(ans+dp[][len-][i][j])%mod;
}
}
printf("%ld\n",ans);
}
return ;
}
CF 149D Coloring Brackets 区间dp ****的更多相关文章
- codeforces 149D Coloring Brackets (区间DP + dfs)
题目链接: codeforces 149D Coloring Brackets 题目描述: 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选择:涂红 ...
- codeforce 149D Coloring Brackets 区间DP
题目链接:http://codeforces.com/problemset/problem/149/D 继续区间DP啊.... 思路: 定义dp[l][r][c1][c2]表示对于区间(l,r)来说, ...
- CodeForces 149D Coloring Brackets 区间DP
http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2 ...
- CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...
- 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 ...
随机推荐
- iOS exit(0); 直接退出程序
exit();
- unity3d下载Obb分包文件
下载OBB插件包 http://pan.baidu.com/s/1c0ouRZE 1.导入插件 注意事项: 如果项目中已经存在Android 插件,需要merge导入的xml文件例如 AndroidM ...
- ArrayList与LinkedList区别
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个 ...
- 新浪微博客户端(23)-计算Cell内控件的frame
DJStatusCellFrame.m #import "DJStatusCellFrame.h" #import "DJStatus.h" #import & ...
- C#多线程学习 之 线程池[ThreadPool](转)
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- web前端跨域方案
ajax跨域请求 qzfl实现 跨子域的xhr 原生xhr不支持跨域,通过iframe+proxy.html达到跨子域 假如A页面要请求B页面,A.B跨子域.A创建指向B的proxy页的ifram ...
- 百度地图代码API
百度地图代码API: http://api.map.baidu.com/lbsapi/creatmap/index.html
- Wormholes(Bellman-ford)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 33008 Accepted: 12011 Descr ...
- HDU 4858 项目管理(邻接表 暴力模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! 两个节点间可 ...
- IOS开发的目录结构
http://www.itjhwd.com/iosmolukaifa/ 目录结构 个人总结: =============================================== ...