括号上色

简介: 小艺酱又得到了一堆括号。括号是严格匹配的。现在给括号进行上色。上色有三个要求:1、只有三种上色方案,不上色,上红色,上蓝色。2、每对括号只有一个上色。3、相邻的两个括号不能上相同的颜色,但是可以都不上色。问括号上色有多少种方案?答案对1000000007取模。

括号上色

小艺酱又得到了一堆括号。
括号是严格匹配的。
现在给括号进行上色。
上色有三个要求:
1、只有三种上色方案,不上色,上红色,上蓝色。
2、每对括号只有一个上色。
3、相邻的两个括号不能上相同的颜色,但是可以都不上色。
问括号上色有多少种方案?答案对1000000007取模。

输入描述:

输入括号序列s。(2<=|s|<=700)

输出描述:

输出方案数。

输入样例:

(())

输出样例:

12

代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define LL long long
const int mod=1000000007;

char s[1000];
int q[1000];
int mp[1000]={0};
int tot=1;
LL dp[1000][1000][3][3]={0};
int vis[1000][1000]={0};

int dfs(int L, int R)
{
    if(vis[L][R])
    {
        return 0;
    }
    vis[L][R]=1;
    if(R-L==1)
    {
        dp[L][R][1][0]=1, dp[L][R][2][0]=1;
        dp[L][R][0][1]=1, dp[L][R][0][2]=1;
        return 0;
    }
    if(mp[L]==R)
    {
        dfs(L+1, R-1);
        for(int u=0;u<3;u++)
        {
            for(int v=0;v<3;v++)
            {
                for(int x=0;x<3;x++)
                {
                    for(int y=0;y<3;y++)
                    {
                        if((u==0||v==0)&&(u!=0||v!=0)&&(u!=x||u+x==0)&&(v!=y||v+y==0))
                        {
                            dp[L][R][u][v]+=dp[L+1][R-1][x][y], dp[L][R][u][v]%=mod;
                        }
                    }
                }
            }
        }
    }
    else
    {
        dfs(L, mp[L]); dfs(mp[L]+1, R);
        for(int u=0;u<3;u++)
        {
            for(int v=0;v<3;v++)
            {
                for(int x=0;x<3;x++)
                {
                    for(int y=0;y<3;y++)
                    {
                        if((u==0||v==0)&&(u!=0||v!=0)&&(v!=x||v==0&&x==0))
                        {
                            dp[L][R][u][y]+=dp[L][mp[L]][u][v]*dp[mp[L]+1][R][x][y], dp[L][R][u][y]%=mod;
                        }
                    }
                }
            }
        }
    }
    
}

int main()
{
    int len,ans = 0;
    scanf("%s",s+1);
    len = strlen(s+1);
    for(int i=1;i<=len;i++)
    {
        if(s[i]=='(')
        {
            q[tot++]=i;
        }
        else
        {
            mp[q[--tot]]=i;
        }
    }
    dfs(1, len);
    for(int u=0;u<3;u++)
    {
        for(int v=0;v<3;v++)
        {
            ans+=dp[1][len][u][v], ans%=1000000007;
        }
    }
    printf("%d",ans);
    return 0;
}


相关文章
|
测试技术 Python
老板叫我写个APP自动化--Yaml文件读取--内附整个框架源码
老板叫我写个APP自动化--Yaml文件读取--内附整个框架源码
234 0
|
16天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23521 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
1331 7
|
10天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2574 4
|
1天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
729 1
|
3天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
991 0